Maison > Article > développement back-end > Questions de test simples sur la priorité des opérateurs PHP
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!