> Nota: Este artículo puede ser un poco confuso para algunos principiantes, ya que asume una comprensión básica de PHP. Si te interesa saber cómo funcionan las condiciones, lee sobre las condiciones en el curso para principiantes.
Soporte: Todas las versiones: PHP 4, PHP 5, PHP 7 |
---|
Breve descripción: |
Tipo: Declaración, construcción (no una función) |
A menudo es necesario determinar si una igualdad se mantiene o si una afirmación es verdadera, para eso están las condiciones. PHP utiliza la siguiente sintaxis como muchos otros lenguajes (especialmente C):
if (/* declaración lógica */) {// construir}
Cada expresión lógica tiene un valor de TRUE
(verdadero) o FALSE
(falso), no hay otras opciones.
Ejemplo de comparación de si la variable $x
es mayor que la variable $y
:
$x = 10;$y = 5;if ($x > $y) {// Esta parte del script se ejecuta si la condición es verdadera} else {// Esta parte del script se ejecutará si la condición no se aplica}
La construcción de la condición tiene un contenido obligatorio entre paréntesis, en el que se da la expresión que se va a probar, compuesta por operadores (resumen más abajo), se pueden enlazar múltiples expresiones utilizando operadores lógicos (resumen más abajo).
Además, la condición contiene dos bloques de declaraciones opcionales.
Por razones prácticas, incluya siempre al menos el primer bloque de sentencias cuando la condición sea verdadera, ya que de lo contrario no tendría sentido probar la expresión.
En general:
La única notación posible con un punto y coma (excepto cuando se utiliza la construcción endif):
if ($x > $y);
Sin embargo, dicha condición no tiene sentido porque en ambos casos el resultado de la comparación será descartado y no se ejecutará ninguna sentencia perteneciente a la condición.
En determinadas circunstancias, la construcción "si" puede utilizarse omitiendo los corchetes compuestos. Esto sólo puede lograrse en los siguientes casos:
Para obtener información más detallada, consulte los 3 capítulos siguientes.
1. Sólo un comando ~ sintaxis abreviada
Si está creando una condición en la que desea ejecutar sólo una construcción (declaración), puede utilizar la notación clásica de corchetes compuestos:
if ($x > 10) { $y = $x; }
O podemos omitir los paréntesis:
if ($x > 10) $y = $x;
Sin embargo, este comportamiento sólo se aplica a un comando en las inmediaciones de la condición.
Un ejemplo mejor (sólo la construcción $y = $x
se ejecuta condicionalmente, el resto se ejecuta siempre):
$x = 5;$y = 3;$z = 10;if ($x > $y)$y = $x;$x = 3;
2. Dos puntos y endif;
if (/* expresión */):konstrukt;konstrukt;konstrukt;endif;
Sin embargo, hace tiempo que esta notación se considera obsoleta porque se reduce en orientación cuando se sumergen múltiples condiciones en sí mismas.
Nota: Me gustaría señalar que este estilo también le gusta a algunas personas, como a Yuh (ver su artículo). Dios no permita que uses esto en algún lugar.
3. Expresión ternaria ~ notación "en línea" de una sola línea
Ocasionalmente es útil hacer una simple comparación en línea con alguna otra acción (por ejemplo, junto con la definición de una nueva variable). Si queremos ejecutar una sola sentencia, todo el procedimiento puede reducirse a una sola línea, aunque manteniéndolo lo más sencillo posible.
$x = 5;$isBiggerThanTwo = ($x > 2 ? true : false);// o incluso más corto:$isBiggerThanTwo = ($x > 2);// o sin paréntesis:$isBiggerThanTwo = $x > 2;
Dentro de la condición se utilizan dos tipos de operadores:
Operador: Significado. |
---|
== |
=== |
No es igual |
>= |
<= |
Mayor |
Menos |
Ejemplo (válido cuando $x no es 5
):
if ($x != 5) { ... }
Operador, Alternativa, Significado, Verdadero cuando..: |
---|
&& |
` |
^^ |
! |
La negación de la expresión depende de las circunstancias. |
Un ejemplo más complejo:
$x = 5;$y = 3;$z = 8;if ($x > 0 && !($y != 2 && $z == $x) || $z > $y) { ... }
A menudo podemos permitirnos omitir cualquiera de los dos operadores (o incluso los dos), pero nunca debemos olvidar las reglas de uso correcto para que la expresión resultante funcione.
En general, cuando se comprueba una expresión sin operador, se comprueba si su valor es TRUE
o no está vacío (por ejemplo, contiene un número distinto de cero, una cadena no vacía, ...).
Ejemplos:
$x = 5;$y = 3;$z = 8;if ($x) { ... } // pasa porque $x no está vacíoif ($x && $y) { ... } // pasa porque $x y $y no están vacíosif (!$x) { ... } // falla porque TRUE es negadoif (isset($z)) { ... } // pasa porque la variable $z existe
Pero pueden surgir situaciones complicadas, especialmente cuando:
si ($x)
y la variable $x
contiene cero (0
), entonces la condición no se cumple.$x
contiene la cadena 0
(el número cero), porque se desborda a cero y la expresión, por tanto, no es verdadera.'false'
como cadena, entonces de nuevo la condición es verdadera porque la cadena no está vacía.Recomiendo una solución sencilla y eficaz para esto: pedir el número de caracteres que se devuelven. Si la cadena está vacía (o la variable no existe), se devuelven cero caracteres y no se cumple la condición. Un ejemplo sencillo:
$x = '0';if ($x) { ... } // la condición no se aplica normalmenteif (strlen($x)) { ... } // la condición es válida porque $x contiene 1 carácter
A continuación, podemos comprobar la existencia de una variable mediante la función isset()
.
Descubrir que las cuerdas son idénticas es fácil:
$a = 'Gato';$b = 'cat';if ($a === $b) {// Si las cadenas son iguales} else {// Si las cadenas son diferentes}
Es importante vigilar bien los tipos de datos por si la entrada pudiera ser equivalente a alguna otra.
Por ejemplo, la cadena vacía $a = '';
es diferente de la cadena NULL
: $b = NULL;
. Necesitamos hacer esta distinción, por ejemplo, debido a las bases de datos en las que hay una diferencia entre un valor que no existe o que está vacío.
$a = '';$b = null;if ($a == $b) {// Se evaluará como TRUE porque// se convierte el tipo de datos.}if ($a === $b) {// Realiza una validación mucho más rigurosa// y no pasará porque es un// contenido y un tipo de datos diferente, por lo tanto// este código nunca se ejecutará.}
También es una buena idea ignorar los caracteres blancos (invisibles) como los espacios, los tabuladores y los saltos de línea cuando se comparan las cadenas. Esto es útil, por ejemplo, al introducir una contraseña y pasarla a una función de hash:
$password = '81dc9bdb52d04dc20036dbd8313ed055'; // 1234$userPassword = '1234';if (md5(trim($userPassword)) === $password) {// La función trim() elimina automáticamente los espacios.}
A veces puede ocurrir que el valor no exista (no es ni TRUE
ni FALSE
), se trata principalmente de un valor obtenido de la base de datos (por ejemplo, estamos pidiendo una columna que no existe), en este caso se devolverá el tipo de dato NULL
.
En general, NULL
se evalúa como FALSE
, es decir, la condición no se aplica. Sin embargo, este comportamiento no siempre es conveniente, ya que un valor inexistente no significa necesariamente que no haya ningún registro.
Ejemplo de la práctica: Tenemos un perfil de usuario y consultamos la página web del usuario. No todos los usuarios necesitan tener una página web, así que en este caso se devuelve
NULL
, pero el usuario sigue existiendo. Así que en este caso, deberíamos utilizar la funciónisset()
para comprobar la (no) existencia de la variable y no sacar una conclusión basada en un valor específico.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | es