Моя цель — поместить сложную логику в оператор if(). Допустим, у меня есть массив значений, и я собираюсь выполнить часть кода, если все в моем массиве не равно нулю. Обычно я мог бы сказать $valid = true
, foreach
мой массив и установить $valid = false
, когда будет найден ноль. Затем я запускал свой код if ($valid)
. В качестве альтернативы я мог бы поместить свой цикл в функцию и поместить функцию в свой if()
.
Но я ленивый, поэтому я не хочу возиться с кучей «валидных» флагов и не буду писать совершенно новую функцию, которая используется только в одном месте.
Итак, скажем, у меня есть это:
if ($q = function() { return 'foo'; }) {
echo $q;
}
else {
echo 'false';
}
Я ожидал, что if
получит 'foo'
, что соответствует истине. Мое закрытие фиксируется на $q
, и оператор выполняется. $q
возвращает строку foo
, и печатается 'foo'.
Вместо этого я получаю ошибку Object of class Closure could not be converted to string
.
Итак, давайте попробуем это вместо этого:
if (function() { return false; }) {
echo 'foo';
}
else {
echo 'true';
}
Я ожидал, что моя функция вернет false и будет напечатано «true». Вместо этого печатается «foo».
Что не так в том, как я это делаю? Кажется, что он говорит: «Да, это точно функция!» вместо «Нет, потому что функция оценена как ложная». Есть ли способ сделать то, что я пытаюсь сделать?
if ( function() { return false; } () ) {
, которое, по-видимому, допустимо в Javascript, но не в PHP. - person ajp5103   schedule 07.11.2011