Простите, если заголовок не совсем соответствует тому, что я спрашиваю, мне трудно описать вопрос точно.
Рассмотрим следующий код 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 утверждают, что они закорачивают эти выражения и вычисляют слева направо, я ожидаю, что значение, заданное в выражениях слева, будет использоваться в выражениях справа. Я что-то упускаю?