Оператор приоритета 'OR' и '=' в PHP

$a = 1; $a OR $a = 'somthing' echo $a; //1 

Зачем? Если = имеет много приоритетов, то «OR», то почему OR выполняется первым?

Потому что, если OR имеет более высокий приоритет, тогда

 $a OR $a = 'somthing' 

будет анализироваться как:

 ($a OR $a) = 'somthing' 

это было бы технически неправильно, потому что вы не можете назначить выражение (в то время как программисты хотели бы написать выражение, например, это кодирование, поэтому оно должно быть допустимым выражением).

потому что приоритет or оператор был низким, поэтому выражение $a OR $a = 'somthing' pareses как $a OR ($a = 'somthing') И в соответствии с первым операндом короткого замыкания, который равен $a был оценен как true и второй выражение операнда не оценено и a остается 1 .

Помните, что правила приоритета выписывают правила грамматики и, следовательно, объясняют, как выражение будет анализироваться. Но приоритет – это свойство времени компиляции, которое сообщает нам, как структурируются выражения. Оценка – это поведение во время выполнения, которое говорит нам о том, как вычисляются выражения (следовательно, как выражения будут оцениваться не могут полностью определяться приоритетом). И PHP-документы, похоже, говорят то же самое:

Приоритет оператора
Приоритет операторов и ассоциативность определяют только то, как сгруппированы выражения, они не определяют порядок оценки . PHP (в общем случае) не указывает, в каком порядке оценивается выражение, а код, который предполагает определенный порядок оценки, следует избегать, поскольку поведение может изменяться между версиями PHP или в зависимости от окружающего кода.

Когда вы помещаете OR между двумя операторами, если первый возвращает true, второй никогда не будет выполнен.

в этом случае первый оператор ( $a ) возвращает true (потому что $a = 1 ), поэтому

второй ($ a = 'somthing'; ) не будет выполнен.

Потому что 1 правдиво.

Что вы говорите с помощью $a OR $a = 'somthing'; является

a истинно ИЛИ установить его в "somthing"

, Ну, это правда, поэтому он не будет установлен, в то время как следующий код будет делать.

 $a = false; $a OR $a = 'somthing'; echo $a; //"something"