PHP 似乎正在向后评估 if 语句

标签 php operator-precedence

<分区>

所以我有一个以下类型的 PHP 语句:

if ($x=function($y) || $z == 50) {

我看到发生的情况是,如果 $z 是 50,则 $x 不会被设置,因为该函数从未被调用过。 这真的可能吗?我可以(并且确实)轻松解决了这个问题,但我想我对正在发生的事情感到困惑,并且想确保我以后不会犯这样的错误 我试图找出如何评估这样的 OR 表达式。有没有我可以查看 php 是如何“编译”的地方?

最佳答案

您有运算符优先级问题。检查这个http://www.php.net/manual/en/language.operators.precedence.php

因为 || 的优先级高于 = 你的表达式真的是这样的

if ( 
    $x = ( 
        function($y) || ( $z == 50 ) 
    ) 
) 

而不是(我认为你的意图)

if ( 
    ($x = function($y)) || ($z == 50) 
)

关于PHP 似乎正在向后评估 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23761970/

相关文章:

html - CSS 选择器优先级——为什么 td 高于伪选择器?

PHP:我无法让用户在多个浏览器上登录网站

php - 使缓存内容无效,If-Modified header ?

php - DOM文档编码问题/字符转换

python - 在python中可能有多个复合赋值

javascript - Math.floor(Math.random() * 5 + 1) 的操作顺序?

php - 强制一个数组至少有一个项目,每个项目都有一个特定的值

php - 将数组的所有索引放在逗号分隔的字符串中

c# - 为什么 Collections 的评估顺序与使用条件运算符的其他类型不同

c - 关于运算符优先级的信息冲突