Pour tout le monde, permettez-moi de préciser:
Il est équivalent à B
.
Ce n'est pas "les deux", ce n'est pas parfois le sien, parfois c'est l'autre, c'est toujours B
. Pour comprendre pourquoi vous voyez parfois des résultats qui indiquent que cela pourrait être A
, vous devez comprendre how type coercion works in PHP.
Si vous passez une valeur Falsey à l ' « argument » de switch
et que vous utilisez expressions dans vos case
s qui se traduisent par une valeur booléenne, ils ne correspondent si votre expression est évaluée à FALSE
.
switch
est essentiellement un grand arbre if
/elseif
qui effectue les comparaisons en vrac (==
au lieu de ===
) entre la valeur passée à switch
(le côté gauche de l'expression) et l'expression dans les case
s (à droite côté).
Ce can be proved tout à fait bien avec une variation sur votre code:
$x = 0;
switch ($x) {
case $x > -1: // This is TRUE, but 0 == FALSE so this won't match
echo "case 1";
case $x == -1: // This is FALSE, and 0 == FALSE so this will match
echo "case 2";
}
Et si nous convertissons que les deux if
/elseif
arbres:
A:
$x = 0;
if ($x > -1) {
// It matches here
echo "case 1";
} else if ($x == -1) {
// and not here
echo "case 2";
}
B:
$x = 0;
if ($x == ($x > -1)) {
// It doesn't match here
echo "case 1";
} else if ($x == ($x == -1)) {
// ..but here instead
echo "case 2";
}
Je sais que c'est ** B **, mais je besoin de plus Certains des "commentaires" dans la documentation indiquent que cela pourrait être ** A ** – Matt
J'ai édité la réponse – Oussama