Hoe werkt “do something OR DIE()” in PHP?

Ik ben een php-app aan het schrijven om toegang te krijgen tot een MySQL-database, en in een zelfstudie zegt het iets van de vorm

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

Hoe weet PHP dat de functie is mislukt, zodat het het matrijsgedeelte wordt uitgevoerd? Ik denk dat ik vraag hoe het “of” deel ervan werkt. Ik denk niet dat ik het eerder heb gezien.


Antwoord 1, autoriteit 100%

Als de eerste instructie trueretourneert, dan moet de hele instructie truezijn, daarom wordt het tweede deel nooit uitgevoerd.

Bijvoorbeeld:

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

Als uw zoekopdracht daarom niet succesvol is, wordt de instructie die()geëvalueerd en wordt het script beëindigd.


Antwoord 2, autoriteit 24%

PHP’s orwerkt als C’s ||(die overigens ook wordt ondersteund door PHP – orziet er gewoon mooier uit en heeft een andere operatorprioriteit – zie deze pagina).

Het staat bekend als een kortsluiting-operator omdat het alle evaluaties overslaat zodra het heeft genoeg informatie om de uiteindelijke waarde te bepalen.

In jouw voorbeeld, als mysql_connect()TRUE retourneert, dan weet PHP al dat de hele instructie TRUE zal opleveren, ongeacht wat die()evalueert, en daarom wordt die()niet geëvalueerd.

Als mysql_connect()FALSE retourneert, weet PHP niet of het hele statement TRUE of FALSE zal opleveren, dus het gaat verder en probeert die()te evalueren – het script in het proces beëindigen.

Het is gewoon een leuke truc die profiteert van de manier waarop orwerkt.


Antwoord 3, autoriteit 8%

Het werkt zoals anderen hebben beschreven.

Gebruik in PHP geen “die”, omdat dit GEEN uitzondering veroorzaakt (zoals in Perl). Gooi in plaats daarvan een uitzondering op de normale manier.

die kan niet worden gevangen in PHP en logt niet – in plaats daarvan drukt het het bericht onfatsoenlijk af en sluit het script onmiddellijk af zonder iemand iets te vertellen of je de gelegenheid te geven het evenement op te nemen, het opnieuw te proberen, enz.


Antwoord 4

$con=mysql_connect($host, $user, $pass)
if(!$con)
{
     die("could not connect");
}
else
{
     echo "Connected";
}

Other episodes