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 true
retourneert, dan moet de hele instructie true
zijn, 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 or
werkt als C’s ||
(die overigens ook wordt ondersteund door PHP – or
ziet 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 or
werkt.
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";
}