empty()
necesita acceder al valor por referencia (para verificar si esa referencia apunta a algo que existe), y PHP antes de 5.5 no admitía referencias a valores temporales devueltos por funciones.
Sin embargo, el verdadero problema que tiene es que lo usa empty()
en absoluto, creyendo erróneamente que el valor "vacío" es diferente de "falso".
Vacío es solo un alias para !isset($thing) || !$thing
. Cuando lo que está comprobando siempre existe (en PHP los resultados de las llamadas a funciones siempre existen), la empty()
función no es más que un operador de negación .
PHP no tiene el concepto de vacío . Los valores que evalúan a falso están vacíos, los valores que evalúan a verdadero no están vacíos. Es lo mismo. Este código:
$x = something();
if (empty($x)) …
y esto:
$x = something();
if (!$x) …
siempre tiene el mismo resultado, en todos los casos, para todos los tipos de datos (porque $x
está definido empty()
es redundante).
El valor de retorno del método siempre existe (incluso si no tiene una return
declaración, el valor de retorno existe y contiene null
). Por lo tanto:
if (!empty($r->getError()))
es lógicamente equivalente a:
if ($r->getError())
empty
: wiki.php.net/rfc/empty_isset_exprs