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