¿Cómo funciona" do something OR DIE () " en PHP?


Estoy escribiendo una aplicación php para acceder a una base de datos MySQL, y en un tutorial, dice algo de la forma

mysql_connect($host, $user, $pass) or die("could not connect");

¿Cómo sabe PHP que la función falló para que ejecute la parte die? Supongo que estoy preguntando cómo funciona la parte "o". No creo haberlo visto antes.

Author: dreftymac, 2009-01-11

4 answers

Si la primera instrucción devuelve true, entonces la instrucción completa debe ser true por lo tanto, la segunda parte nunca se ejecuta.

Por ejemplo:

$x = 5;
true or $x++;
echo $x;  // 5

false or $x++;
echo $x; // 6

Por lo tanto, si su consulta no tiene éxito, evaluará la instrucción die() y finalizará el script.

 126
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-12 10:24:33

PHP or funciona como C || (que por cierto también es compatible con PHP - or simplemente se ve mejor y tiene diferente precedencia de operador - ver esta página).

Se conoce como un operador de cortocircuito porque omitirá cualquier evaluación una vez que tenga suficiente información para decidir el valor final.

En su ejemplo, si mysql_connect() devuelve TRUE, entonces PHP ya sabe que toda la instrucción se evaluará como TRUE no importa lo que die() evalúe, y por lo tanto die() no se evalúa.

Si mysql_connect() devuelve FALSE, PHP no sabe si toda la instrucción se evaluará como VERDADERO o FALSO, por lo que continúa e intenta evaluar die() - terminando el script en el proceso.

Es solo un buen truco que aprovecha el camino or funciona.

 30
Author: Artelius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-11 06:55:48

Funciona como otros han descrito.

En PHP, no use "die", ya que NO genera una excepción (como lo hace en Perl). En su lugar, lanza una excepción correctamente de la manera normal.

Die no puede ser capturado en PHP, y no registra - en su lugar imprime el mensaje de forma ingrata e inmediatamente sale del script sin decirle nada a nadie o darle la oportunidad de grabar el evento, reintentar, etc.

 11
Author: MarkR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-11 07:25:35
$con=mysql_connect($host, $user, $pass)
if(!$con)
{
     die("could not connect");
}
else
{
     echo "Connected";
}
 0
Author: Arun Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-27 02:53:54