Aujourd'hui, quelqu'un dans le groupe posait une question sur la priorité des opérateurs PHP. Il se trouve que j'ai déjà rencontré des problèmes similaires. Trions-les ici pour que tout le monde puisse comprendre et éviter d'avoir des ennuis :)
Commençons par un simple :
$a = 3;
if ($a = 5) {
$a++;
}
var_dump($a);// (int)6
Donc, une bonne pratique de codage pour les nombres est de les mettre devant et de les écrire sous la forme 5 == $a De cette façon, même si vous écrivez 5 = $a, une erreur sera signalée. à ce moment et ce ne sera pas une affectation implicite
Allez, passons à la fosse suivante.
$x = 2;
echo $x == 2 ? Je : $x == 1 ? que le résultat c'est moi, car $x est bien égal à 2 selon les règles de l'opérateur ternaire. Si le devant de ? est vrai, cela me sortira
Le point de connaissance ici réside dans. la priorité de l'opérateur et les caractéristiques associatives à gauche de l'opérateur ternaire. En fait, le véritable processus d'exécution est le suivant :
$x = 2;//Attribuer 2 à la variable x Rien à dire<.>echo $x == 2 ? : $x == 1 ? a une priorité plus élevée que l'opérateur ternaire, il est converti en le code suivant
#echo true? : false ? 🎜>//En raison de la nature associative à gauche de l'opérateur ternaire, le code ci-dessus est équivalent à
# echo (true ? 'I' : 'You' : 'It' ? ;
//Calculez d'abord le
#echo 'I' dans le crochet de gauche ? 'You' : 'It' //Tout le monde devrait comprendre maintenant
Eh bien, continuez à surveiller la fosse
$a = 3;
$b = 5;
if ($a = 3 || $b = 7) {
$a++;
$b++;
}
var_dump($a);//(bool)true
var_dump($ b);//(int)6
Je pense que de nombreux étudiants auront rencontré cette question lors des questions d'entretien. J'ai également été trompé la première fois.
Les étudiants qui ont été trompés pensent qu'il y a probablement plusieurs réponses (4,6), (2,6)
$b n'est fondamentalement pas controversé, la clé is $ Quelle est la situation ? Expliquons cet écueil.
#Il n'y a rien à dire sur l'affectation
$a = 3;
$b = 5;
si ($a = 3 || $b = 7) {
$a++;
$b++;
}
//Point de connaissance 1 : || Le ratio de priorité de || = élevé
//Donc $a = 3 || $b = 7 est équivalent à $a = (3 || $b = 7)
//Parce que 3 || $b = 7, l'expression entière est vraie, elle renvoie donc vrai et l'attribue à $a. cette fois, $a = true, il sera exécuté Contenu entre parenthèses
//Point de connaissance 2 : Les opérateurs d'incrémentation/décrémentation n'affectent pas les valeurs booléennes. Diminuer la valeur NULL n'a aucun effet, mais le résultat de l'incrémentation de NULL est 1
//ce qui signifie que $a est toujours vrai, pas 2 après 1++ $b est toujours++
//Donc le résultat est que $a est vrai et $b vaut 6 après l'incrément
Les étudiants qui tombent dans le piège ici penseront que c'est 3. Notez que le signe = est l'affectation == opérateur de comparaison
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!