Maison développement back-end tutoriel php Une exception à la priorité des opérateurs PHP

Une exception à la priorité des opérateurs PHP

Oct 15, 2019 pm 05:10 PM
优先级 运算符

Une exception à la priorité des opérateurs PHP

今天在老王的技术手册看到一个问题:

<?php
if ($a = 100 && $b = 200) {
     var_dump($a, $b);
}
Copier après la connexion

输出是什么?

这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单,

如果说布尔与之前的部分, 是由于优先级的问题, 但是如果仅仅是优先级的问题的话, 那么结果应该是:

$a = (100 && $b) = 200
Copier après la connexion

而实际上的结果, 确实高优先级的&&让步给次优先级的=, 让 $b = 200 先结合了.

究其原因, 是因为PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:

Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.

这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,

有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:

laruence你好:

问一个php运算符优先级的问题

$t == 1 && $tt = 2

按照php运算符优先级应该是

(($t == 1) && $tt) = 2

这个顺序执行,但实际上应该是

($t == 1) && ($tt = 2)

我有些不太理解。

其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:

expr_without_variable:
  // 有隐规则存在, 相当于T_BOOLEAN_AND成为了"一元操作符".
  |   expr T_BOOLEAN_AND  { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr
Copier après la connexion

最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:

$result = mysql_query(*)  or die(mysql_error());
Copier après la connexion

类似的还可以用or来实现三元操作符(?:)的功能:

$person = $who or $person = "laruence";
//等同于:
$person = empty($who)? "laruence" : $who;
Copier après la connexion

 更多PHP相关知识,请访问PHP中文网

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment définir en toute sécurité une priorité élevée pour les applications dans Windows 11 ? Comment définir en toute sécurité une priorité élevée pour les applications dans Windows 11 ? May 06, 2023 pm 06:28 PM

Windows fait un excellent travail en allouant des ressources système aux processus et aux programmes qui en ont le plus besoin en leur attribuant des priorités. La plupart des applications que vous installez fonctionneront parfaitement au niveau de priorité « normal » par défaut. Parfois, cependant, vous devrez peut-être exécuter un programme, tel qu'un jeu, à un niveau supérieur au niveau normal par défaut pour améliorer ses performances. Mais cela a un coût, et c’est une affaire qui mérite réflexion. Que se passe-t-il lorsque vous définissez une application comme étant prioritaire ? Windows dispose d'un total de six niveaux de priorité pour l'exécution de différents processus et programmes : faible, inférieur à la normale, normal, supérieur à la normale, élevé et en temps réel. Windows classera et mettra les applications en file d'attente en fonction de leur priorité. Plus la priorité est élevée, plus l'application

Top 8 des façons de désactiver les notifications sur Windows 11 (et 3 astuces) Top 8 des façons de désactiver les notifications sur Windows 11 (et 3 astuces) May 05, 2023 pm 12:49 PM

Les notifications sont un excellent outil de productivité, mais elles peuvent parfois être distrayantes. Que vous souhaitiez désactiver complètement les notifications ou pour certaines applications, cette page est ce dont vous avez besoin. Nous verrons également comment désactiver et activer automatiquement les notifications à l'aide de FocusAssist. De plus, si l'application Paramètres n'est pas pour vous, vous pouvez utiliser des outils tels que l'invite de commande, l'éditeur de registre et l'éditeur de stratégie de groupe pour une manière plus geek de désactiver les notifications. Consultez le didacticiel suivant pour découvrir 7 façons de désactiver les notifications sur Windows 11. Pourquoi devriez-vous désactiver les notifications sur Windows 11 ? La désactivation des notifications présente divers avantages, dont certains sont répertoriés ci-dessous. Cependant, gardez à l'esprit que la désactivation des notifications pour les applications importantes peut

Comment changer la priorité dans le Gestionnaire des tâches sous Windows 11 Comment changer la priorité dans le Gestionnaire des tâches sous Windows 11 May 17, 2023 am 10:26 AM

Quelle est la priorité du processus ? Les ordinateurs ne sont pas si différents de leurs créateurs. Même s’ils semblent être multitâches, en réalité, ils jonglent spontanément entre les tâches. Mais tous les processus ou programmes ne bénéficient pas de ressources allouées de manière égale. Les processus importants, tels que ceux nécessaires au bon fonctionnement du système, reçoivent une priorité élevée, tandis que ceux qui ne fonctionnent que de manière périphérique peuvent se voir attribuer une priorité moindre. Cela permet au système de fonctionner correctement, même lorsqu’il est soumis à de fortes contraintes. Quelle est la priorité ? Les processus ont 6 priorités différentes. Celles-ci sont les suivantes : Faible – Il s'agit de la priorité la plus basse. Un processus avec une priorité « faible » ne recevra pas les ressources nécessaires tant que toutes les autres tâches ne seront pas terminées. Ci-dessousNorma

Comment activer ou désactiver le mode productivité pour une application ou un processus dans Windows 11 Comment activer ou désactiver le mode productivité pour une application ou un processus dans Windows 11 Apr 14, 2023 pm 09:46 PM

Le nouveau gestionnaire de tâches de Windows 11 22H2 est une aubaine pour les utilisateurs expérimentés. Il offre désormais une meilleure expérience d'interface utilisateur avec des données supplémentaires pour garder un œil sur vos processus, tâches, services et composants matériels en cours d'exécution. Si vous utilisez le nouveau Gestionnaire des tâches, vous avez peut-être remarqué le nouveau mode de productivité. qu'est-ce que c'est? Cela contribue-t-il à améliorer les performances des systèmes Windows 11 ? Découvrons-le ! Qu’est-ce que le mode productivité dans Windows 11 ? Le mode productivité est l'une des tâches du Gestionnaire des tâches

Quel est l'opérateur racine en langage C ? Quel est l'opérateur racine en langage C ? Mar 06, 2023 pm 02:39 PM

Dans le langage C, il n'y a pas d'opérateur racine. La fonction intégrée « sqrt() » est utilisée pour ouvrir la racine, et la syntaxe « sqrt(value x) » est utilisée par exemple, « sqrt(4) » ; consiste à effectuer l'opération racine carrée sur 4. , le résultat est 2. sqrt() est une fonction d'opération racine intégrée en langage C. Son résultat d'opération est la racine carrée arithmétique de la variable de fonction ; cette fonction ne peut ni opérer de valeurs négatives ni produire de résultats imaginaires.

Comment personnaliser les paramètres de notification sur Windows 11 Comment personnaliser les paramètres de notification sur Windows 11 May 02, 2023 pm 03:34 PM

Personnalisation des paramètres généraux de notification Commençons par les bases des paramètres de notification. Premièrement, si vous souhaitez configurer des notifications sur Windows 11, il existe deux manières de procéder. Le moyen le plus rapide consiste à cliquer avec le bouton droit sur la partie date et heure dans le coin de la barre des tâches et à sélectionner Paramètres de notification. Vous pouvez également utiliser le menu Démarrer pour ouvrir l'application Paramètres et sélectionner Notifications dans la section Système (ouverte par défaut). Ici, vous verrez un aperçu de vos paramètres de notification. Vous pouvez désactiver complètement les notifications ou cliquer sur la première option, Notifications, pour développer le menu déroulant. Ce menu propose des options supplémentaires, telles que la désactivation des sons de notification. Vous pouvez également choisir si vous souhaitez que les notifications apparaissent sur l'écran de verrouillage, y compris des paramètres spécifiques pour les rappels et les appels entrants.

Erreur Golang : 'utilisation invalide de l'opérateur...' Comment le résoudre ? Erreur Golang : 'utilisation invalide de l'opérateur...' Comment le résoudre ? Jun 24, 2023 pm 05:54 PM

Pour les développeurs Golang, « invaliduseof...operator » est une erreur courante. Cette erreur se produit généralement lors de l’utilisation de fonctions de paramètres de longueur variable. Il sera détecté au moment de la compilation et indiquera quelles parties ont des problèmes. Cet article explique comment résoudre cette erreur. 1. Qu'est-ce qu'une fonction paramètre de longueur variable ? Une fonction paramètre de longueur variable, également connue sous le nom de fonction paramètre de longueur variable, est un type de fonction dans le langage Golang. À l'aide de fonctions de paramètres de longueur variable, vous pouvez définir plusieurs

Explication détaillée de la méthode d'ajustement des priorités des processus Linux Explication détaillée de la méthode d'ajustement des priorités des processus Linux Mar 15, 2024 am 08:39 AM

Explication détaillée de la méthode d'ajustement de la priorité des processus Linux. Dans le système Linux, la priorité d'un processus détermine son ordre d'exécution et l'allocation des ressources dans le système. Un ajustement raisonnable de la priorité du processus peut améliorer les performances et l'efficacité du système. Cet article présentera en détail comment ajuster la priorité du processus sous Linux et fournira des exemples de code spécifiques. 1. Présentation de la priorité des processus Dans le système Linux, chaque processus est associé à une priorité. La plage de priorité va généralement de -20 à 19, où -20 représente la priorité la plus élevée et 19 représente

See all articles