Programación con PHP 5 – 2.6.4.1 Evaluación de circuito corto.

2.6.4.1 Evaluación de circuito corto
Cuando se usa los operadores lógicos AND/OR se puede conocer el resultado evaluando solamente el operador de la izquierda.
Por ejemplo cuando PHP evalua 0 && 1 , puede decir que el resultado será false viendo solo en operando de la izquierda sin continuar con la evaluación del operando derecho.


if ($_b!=0 && $_a/$_b<=0){
    echo "el resultado : ".$_a/$_b. " es negativo";
}
else{
    echo "El denominador causara una división por cero.";
}

Los operadores de circuito corto son && y || y tienen mayor precedencia que sus respectivos AND y OR.
En el código el operador && sólo evalua el operador de la izquierda y si este es cero no se evaluará la expresión de la derecha (que causaria una división por cero), para pasar a ejecutar la sentencia else.

En este otro ejemplo usaremos el operador OR en el que se usa la construcción die para que envie un mensaje justo antes de abortar el script.

$fp = fopen("algunarchivo.xhtml", "r") OR die ("No es posible abrir el archivo");
echo $fp;
if (isset($fp)){
    echo "Variable recurso : $fp";
}

La secuencia es :

1. Como el operador de asignación (=) tiene mayor precedencia que OR, entonces se ejecuta la asignación (y ya no se volverá a ejecutar).
2. El valor retornado por fopen es de tipo recurso que será asignado a $fp.
2.1 Si el archivo EXISTE la función fopen devolvera un valor.
2.2 Si el archivo NO EXISTE la función fopen lanzará un error que hara que ejecute die que enviará el mensaje al browser y se detendra la ejecución del script.
3 Luego que $fp ya tiene un valor asignado , se ejecuta la operación OR.
3.1 Si el archivo EXISTE la función die no enviará nada al browser porque no es el caso.
4. Si el fopen no ha lanzado un error se ejecuta el resto de código.

Ahora una variación con el operador || :

$fp = fopen("algunarchivo.xhtml", "r") || die ("No es posible abrir el archivo");
echo $fp;
if (isset($fp)){
    echo "Variable recurso : $fp";
}

La secuencia es :

1. Como el operador || tiene mayor precedencia que el operador de asignación (=) entonces se ejecuta.
2. El valor retornado por fopen es de tipo recurso que será evaluado junto a die para dar el resultado de ||.
2.1 Si el archivo EXISTE la función fopen devolvera un valor.
2.2 Si el archivo NO EXISTE la función fopen lanzará un error que hara que se ejecute die que enviará el mensaje al browser y se detendra la ejecución del script.
3. Luego, se ejecuta la operación =.
3.1 Si el archivo EXISTE el valor devuelto por la operacion || será asignado a $fp pero no será un tipo recurso, porque la operación || le aplicó una conversión hacia un entero.
4. Si el fopen no ha lanzado un error se ejecuta el resto de código.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s