Curiosidades prácticas de programación en PHP

En este artículo recopilo algunos trucos, consejos o “tips” que he ido encontrando. Me fueron muy útiles mientras aprendía PHP, o buscando información sobre optimización y mejoras de rendimiento.

Si nos da igual que los datos nos entren por POST o GET, podemos usar $_REQUEST[‘name’] en vez de leer específicamente $_POST[‘name’] o $_GET[‘name’]

PHP genera automáticamente un Content-type: text/html, siempre que no indiquemos cualquier otro usando la función header()

Ámbito de las variables globales en las funciones: Una variable utilizada en una función es de ámbito local SIEMPRE a no ser que se declare en el ámbito de la función como “global”.

$string="ABC";
$string{1}=="B"
$my_array = array('A','B','C'); 
$my_array[1]=="B";

Include o Require: Si falla un Require se produce un error que termina la ejecución del código, mientras que include sólo produce un aviso y se continúa con el script. Un Require se incluye y procesa SIEMPRE, con independencia del lugar del código donde se encuentre, mientras que con

Include sólo se incluirá el fichero, y se procesará, SI SE ENTRA en el bloque de código en el que se ejecuta la orden. “Require” incrusta el fichero indicado sin importar la extensión, como código PHP a ser ejecutado justo en el momento y lugar de su llamada.

El operador “idéntico” === se puede utilizar para comprobar que, si $entero=0 y $st=”0″, $entero==$st pero NO $entero===$st. Hay que tener en cuenta que es más lento.

Se puede utilizar foreach como en Perl y switch como en C.

Podemos forzar el tipo de variable al indicar el elemento de un array…
Por ejemplo:

$indice_cadena = "34";
$array_de_valores[(int) $indice_cadena]
ya que: $array_de_valores[$indice_cadena] sería distinto.

Suprimir los “echos” de error del PHP para funciones específicas. Simplemente se precede el nombre de función con una @ Por ejemplo:
$filehandle = @fopen(“fichero.txt”, “r”)…

Manejar archivos. De forma muy similar a C…
$filepointer = fopen(“$DOCUMENT_ROOT/../folder_outside_httpdocs/data.txt”, “w”);
fwrite(filepointer, data, bytes);

Archivos: System Locking con flock($filepointer, FLAG);
Siendo los FLAGS:
1/LOCK_SH bloqueo de lectura, permitida lectura exclusiva simultánea
2/LOCK_EX bloqueo de escritura, por tanto no permitida ni la escritura ni la lectura simultánea
3/LOCK_UN desbloquear

La redirección http más rápida que podemos efectuar en nuestro script después de realizar una serie de operaciones, es utilizar la cabecera http “Location” con header(). Por ejemplo header(“Location: http://www.dominio.com/otrolugar”); Recordar siempre salir inmediatamente después con exit();

Si no necesitamos expresiones regulares, es más rápido obtener un array usando explode(…) que con split(…)

Añadir un sólo elemento al final de un array es más rápido usando
$miarray[]=$nuevo_elemento;
que utilizar array_push(…)

Si un método puede ser estático, decláralo estático. El incremento de velocidad es x4

Echo es más rápido que print.

Si necesitas averiguar la longitud de una cadena, o si está vacía, es mucho más rápido hacer if (!isset($foo{5})) { echo “Foo demasiado corta”; } que usar strlen como aquí: if (strlen($foo) < 5) { echo “Foo demasiado corta”; }

Usar require_once() sólo si no hay más remedio: es más lento que require.

Utiliza paths (rutas) completos en includes y requires, menos tiempo gastado en resolver los paths del sistema.

Si te interesa, el timestamp de la petición está en $_SERVER[’REQUEST_TIME’] que suele ser distinto que llamar a la función time() al principio del script.

str_replace es más rápido que preg_replace, pero strtr es 4 veces más rápido que str_replace

Utilizar $row[’id’] es 7 veces más rápido que usar $row[id]

Incrementar una variable global es 2 veces más lento que incrementar una local

Incrementar la propiedad de un objeto ($this->prop++) es 3 veces más lento que incrementar una local

Incrementar una variable local sin definir es 9-10 veces más lento que una pre-inicializada.

Usar comilla simple ‘ en lugar de la doble ” en tus cadenas hará las cosas un poco más rápidas, ya que entre comillas simples no se buscarán variables. Por supuesto, hazlo solo cuando no necesites variables en tu cadena.

Esta entrada fue publicada en PHP. Guarda el enlace permanente.

Deja un comentario