empty()
должен получить доступ к значению по ссылке (чтобы проверить, указывает ли эта ссылка на что-то существующее), а PHP до 5.5 не поддерживал ссылки на временные значения, возвращаемые функциями.
Однако настоящая проблема, с которой вы столкнулись, заключается в том, что вы используете ее empty()
вообще, ошибочно полагая, что «пустое» значение отличается от «ложного».
Пустой это просто псевдоним для !isset($thing) || !$thing
. Когда проверяемая вещь всегда существует (в PHP всегда присутствуют результаты вызовов функций), empty()
функция является ничем иным, как оператором отрицания .
В PHP нет понятия пустоты . Значения, которые оцениваются как ложные, являются пустыми, значения, которые оцениваются как истинные, не являются пустыми. Это то же самое. Этот код:
$x = something();
if (empty($x)) …
и это:
$x = something();
if (!$x) …
во всех случаях всегда имеет одинаковый результат для всех типов данных (поскольку $x
определяется empty()
как избыточный).
Возвращаемое значение из метода всегда существует (даже если у вас нет return
оператора, возвращаемое значение существует и содержит null
). Следовательно:
if (!empty($r->getError()))
логически эквивалентно:
if ($r->getError())
empty
: wiki.php.net/rfc/empty_isset_exprs