Hoe werkt waar/onwaar in PHP?

Ik vraag me af hoe PHP intern omgaat met waar/onwaarvergelijkingen.
Ik begrijp dat waar wordt gedefinieerd als 1 en onwaar wordt gedefinieerd als 0.
Als ik if("a"){ echo "true";}doe, echo “true“. Hoe herkent PHP “a” als 1 ?


Antwoord 1, autoriteit 100%

Dit wordt behandeld in de PHP-documentatie voor booleansen type vergelijkingstabellen.

Bij conversie naar booleaans worden de volgende waarden als ONWAAR beschouwd:

  • de booleaanse FALSEzelf
  • het gehele getal 0(nul)
  • de vlotter 0.0(nul)
  • de lege tekenreeks en de tekenreeks '0'
  • een array met nul elementen
  • een object met nul-lidvariabelen (alleen PHP 4)
  • het speciale type NULL(inclusief uitgeschakelde variabelen)
  • SimpleXML-objecten gemaakt van lege tags

Elke andere waarde wordt als WAAR beschouwd.


Antwoord 2, autoriteit 11%

Omdat ik deze pagina meerdere keren heb bezocht, heb ik besloten om een ​​voorbeeld (losse) vergelijkingstest te plaatsen.

Resultaten:

""         -> false
"0"        -> false
"0.0"      -> true
"1"        -> true
"01"       -> true
"abc"      -> true
"true"     -> true
"false"    -> true
"null"     -> true
0          -> false
0.1        -> true
1          -> true
1.1        -> true
-42        -> true
"NAN"      -> true
0          -> false
NAN        -> true
null       -> false
true       -> true
false      -> false
[]         -> false
[""]       -> true
["0"]      -> true
[0]        -> true
[null]     -> true
["a"]      -> true
{}         -> true
{}         -> true
{"t":"s"}  -> true
{"c":null} -> true

Testcode:

Codefragment weergeven


Antwoord 3, autoriteit 7%

Nul is onwaar, niet-nul is waar.

In php kun je explicieter testen met de ===-operator.

if (0==false) 
    echo "works"; // will echo works
if (0===false) 
    echo "works"; // will not echo anything

Antwoord 4, autoriteit 2%

De beste operator voor strikte controle is

if($foo === true){}

Op die manier controleer je echt of het waar is, en niet 1 of gewoon ingesteld.


Antwoord 5, autoriteit 2%

PHP gebruikt zwak typen (wat het ‘type jongleren’ noemt), wat een slecht idee is (hoewel dat een gesprek is voor een andere keer). Wanneer u een variabele probeert te gebruiken in een context die een boolean vereist, zal het wat uw variabele ook is, converteren naar een boolean, volgens enkele meestal willekeurige regels die hier beschikbaar zijn:
http://www.php. net/manual/en/language.types.boolean.php#language.types.boolean.casting


Antwoord 6

beschouw de operator als een unaire functie: is_false(type value)die true of false retourneert, afhankelijk van de exacte implementatie voor het specifieke type en de waarde. Overweeg een if-statement om een ​​dergelijke functie impliciet aan te roepen, via syntactische suiker.

Een andere mogelijkheid is dat het type een cast-operator heeft, die het type impliciet in een ander type verandert, in dit geval tekenreeks naar Boolean.

PHP onthult dergelijke details niet, maar C++ maakt overbelasting van de operator mogelijk, waardoor fijne details van de implementatie door de operator zichtbaar worden.

Other episodes