【发布时间】:2010-11-16 10:47:37
【问题描述】:
如果标题不完全符合我的要求,请原谅我,我很难准确地描述这个问题。
考虑以下 PHP 代码:
#!/usr/bin/php
<?php
class foo{
function bar()
{
return true;
}
}
if (true && $a = new foo() && $a->bar()) {
echo "true";
} else {
echo "false";
}
它给了
Fatal error: Call to a member function bar() on a non-object
对于 $a->bar();表达。
考虑以下 C 代码:
int main(void)
{
int i = 0;
if (i += 1 && printf("%d\n", i))
{
printf("Done: %d.\n", i);
}
}
它输出:
0
Done: 1.
这是为什么?由于 C 和 PHP 声称将这些表达式短路并从左到右求值,因此我希望在左侧的表达式中设置的值可以在右侧的表达式中使用。我有什么遗漏吗?
【问题讨论】: