PHP - Similitudes a no confundir

Diciembre 2016




Introducción


En este artículo veremos varias funciones en PHP que son diferentes pero que muchos creen que son similares.

¿Concatenación o parámetros?


Con la función echo (o print) es posible mostrar varias variables y cadenas de caracteres unas a continuación de otras.
Ejemplo:
<?php
$blabla='del texto';
echo 'Esto es ',$blabla;
?>

Aquí, utilizamos la coma entre la cadena de caracteres y la variable. También podemos utilizar un punto.

Cuando se utilizan puntos, es llamado concatenación.
Utilizando coma, se pasan varios parámetros a la función.

He probado los dos métodos, y el paso de varios parámetros es definitivamente más rápido.

Sin embargo, las comas únicamente pueden ser utilizadas con echo o print, a diferencia de la concatenación.
Ejemplo:
<?php
echo $blabla.'blabla';//funciona (concatenación)
echo $blabla,'blabla';//funciona (paso de varios parámetros)
$variable=$blabla.'blabla'//funciona (concatenación)
$variable=$blabla,'blabla'//no funciona (paso de varios parámetros)
?>

Comillas y Apostrofes


O “comillas dobles” y “comillas simples”
Cuando utilizamos la función echo, ésta puede ser utilizada con comillas dobles o simples.
Con las comillas dobles, será mostrada una variable.
Con las comillas simples, será considerado como texto.

Ejemplo:
<?php
$variable='Texto';
echo "Esto es : $variable";
//muestra : "Esto es : Texto"

$variable='Texto';
echo 'Aquí un $variable';
//muestra : "Aquí un $variable"
?>


Es por esto que es más rápido utilizar una cadena con comillas simples, ya que php no buscará variables.

Estructura require/include


Estas dos estructuras, que permiten incluir un fichero en la página, son casi idénticas, excepto en la gestión de errores.
Si el fichero no existe, include genera un error de nivel Warning (alerta), en cambio require genera un error fatal y detiene el script.
include
require

Mejor utilizar include_once y require_once que garantizaran que tu fichero sea incluido una sola vez, en el caso que include o require intenten incluir accidentalmente una pagina que ya ha sido incluida.

isset vs empty


La función isset comprueba la existencia de una variable. Es lo único que hace.

En cambio, la función empty comprueba:
  • Si la variable existe (al igual que la función isset)
  • Si un número no es igual a cero
  • Si una cadena de caracteres no es vacía o contiene únicamente espacios/retornos de carro/tabulaciones o un cero.


Por lo tanto es mas rápido:
<?php
if (empty($variable))
    echo 'La variable está vacía';
else
    echo 'La variable no está vacía';
?>

Que:
if (isset($variable))
  {
    if (empty($variable))
        echo 'La variable está vacía;
    else
        echo 'La variable no está vacía;
  }
else
   echo 'La variable no existe';
?>

¿htmlentities o htmlspecialchars?


Estas funciones permiten hacer “inofensivas” a la variables, es decir reemplazar ciertos caracteres (especialmente los signos “>” y “<”) por sus entidades equivalentes en html.
Sin embargo hay una ligera diferencia entre éstas dos:
htmlentities reemplaza todos los caracteres que pueden escribirse con entidades por sus respectivas entidades en html.
Ejemplos:
é se convierte en &eacute;
" se convierte en &quot;
« se convierte en &laquo;
< se convierte en & lt; (sin espacio después de &)
& se convierte en &amp;


En cuanto a htmlspecialchars, reemplaza únicamente los caracteres especiales.
< se convierte en & lt; (sin espacio después de &)
> se convierte en & gt; (sin espacio después de &)
" se convierte en &quot,
& se convierte en &amp;


La única entidad html que conozco y que no es reemplazada por defecto es "'", la entidad de la comilla simple (apostrofo): '
Es posible utilizar opciones para reemplazar o no ciertos caracteres (ver la documentación).
El apostrofe es reemplazado por ''' con la opción ENT_QUOTES.

¿Qué función utilizar?
Yo recomiendo utilizar htmlentities ya que los acentos y otros caracteres especiales son reemplazados, lo que garantiza que no tendremos errores de codificación.
Sin embargo, los ficheros son mas pesados con esta función, ya que una entidad ocupa 8 bytes (creo) más que el carácter que le corresponde escrito tal cual.
htmlentities
htmlspecialchars

Cantidad de signos igual


Veamos un ejemplo de condición:
<if($InfoSobreLaimage=@getimagesize($image))
   echo'es correcto, tenemos la información sobre la imagen';
else
   echo'hay un problema (mala dirección, imagen en formato ico/bmp...)';


Aquí, hay un signo igual («$InfoSobreLaimagen=@getimagesize($image)»), lo que significa que le asignamos el resultado de getimagesize a la variable "$InfoSobreLaimagen", luego verificamos si vale true (la función ha tenido éxito) o false (un error) con la condición.

Otro ejemplo, esta vez con dos signos:
//definimos una variable falsa (para el ejemplo) :
$VariableQueNoSirveParaNada=0;
if($VariableQueNoSirveParaNada==false)
  echo '$VariableQueNoSirveParaNada vale false es una condición verificada con dos signos ==';
else
  echo '$VariableQueNoSirveParaNada vale false es una condición NON verificada con dos signos ==';


Aquí la condición es verificada, ya que se utiliza únicamente dos signos igual.
False y 0 no son del mismo tipo, pero equivalen a una variable vacía.
Con dos signos, se verifica por lo tanto la equivalencia.

Sin embargo, si utilizamos tres signos igual, la condición no es verificada ya que tres signos igual significan igual valor y mismo tipo.

Ejemplos:
Con dos signos igual, esta condición es verificada:
'0'==0==false

Con tres signos igual, esta misma condición no es verificada, ya que:
'0':Cadena de caracteres
0:valor numérico
false:booleano

Para resumir:
=: Asigna un valor a una variable
==: Comprueba si los valores son equivalente
===: Comprueba si los valores son equivalente y del mismo tipo.

Consulta también :
El documento «PHP - Similitudes a no confundir» de CCM (es.ccm.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo siempre y cuando respetes las condiciones de dicha licencia y des crédito a CCM.