Found an interesting piece of code in Symfony core
if ('' !== $host = $route->getHost()) {
...
}
The precedence of !== is higher than the = but how does it work logically? The first part is clear but the rest?
I've created a little sample but it's still not clear: sample
PHP Conditional Assignment OperatorsReturns the value of $x. The value of $x is expr1 if expr1 exists, and is not NULL. If expr1 does not exist, or is NULL, the value of $x is expr2.
Definition: Conditional assignment refers to transferring rights of the life insurance policy by the life insurance owner to someone else under some terms and conditions. The policyholder is the assignor, and the person to whom the policy is assigned is called the assignee.
=== Operator: This operator is used to check the given values and its data type are equal or not. If yes, then it returns true, otherwise it returns false.
The + operator is the addition operator. += will add numeric values. Save this answer.
The term "ternary operator" refers to an operator that operates on three operands. An operand is a concept that refers to the parts of an expression that it needs. The ternary operator in PHP is the only one that needs three operands: a condition, a true result, and a false result.
The point is: The left hand side of an assignment has to be an variable! The only possible way to achieve this in your example is to evaluate the assignment first - which is what php actually does.
Adding parenthesis makes clear, what happens
'' !== $host = $route->getHost()
// is equal to
'' !== ($host = $route->getHost())
// the other way wouldn't work
// ('' != $host) = $route->getHost()
So the condition is true, if the return value of $route->getHost()
is an non empty string and in each case, the return value is assigned to $host
.
In addition, you could have a look a the grammer of PHP
...
variable '=' expr |
variable '=' '&' variable |
variable '=' '&' T_NEW class_name_reference | ...
If you read the operator precendence manual page carefully, you would see this notice
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With