No se puede utilizar el valor de retorno del método en el contexto de escritura
Creo que el siguiente código debería funcionar, pero no es así (Editado: ahora funciona en PHP 5.5+) :
if (!empty($r->getError()))
Donde getError()
es simplemente:
public function getError()
{
return $this->error;
}
Sin embargo, termino con este error:
no se puede utilizar el valor de retorno del método en el contexto de escritura
¿Qué quiere decir esto? ¿No es esto sólo una lectura?
empty()
necesita acceder al valor por referencia (para verificar si esa referencia apunta a algo que existe), y PHP anterior a 5.5 no admitía referencias a valores temporales devueltos por funciones.
Sin embargo, el verdadero problema que tiene es que no lo utiliza empty()
en absoluto, creyendo erróneamente que el valor "vacío" no es diferente del "falso".
Vacío es sólo un alias para !isset($thing) || !$thing
. Cuando lo que estás 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 se evalúan como falso están vacíos, los valores que se evalúan como 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 return
una 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())
Nota: Esta es una respuesta muy votada y de gran visibilidad, pero tenga en cuenta que promueve prácticas de codificación malas e innecesarias. Consulte la respuesta de @ Kornel para conocer la forma correcta.
Nota n.º 2: apoyo las sugerencias de utilizar la respuesta de @Kornel . Cuando escribí esta respuesta hace tres años, simplemente pretendía explicar la naturaleza del error, no necesariamente respaldar la alternativa. No se recomienda el siguiente fragmento de código.
Es una limitación de vacío() en versiones de PHP inferiores a 5.5.
Nota: vacío() solo verifica las variables ya que cualquier otra cosa resultará en un error de análisis. En otras palabras, lo siguiente no funcionará: vacío(trim($nombre)).
Tendrías que cambiar a esto
// Not recommended, just illustrates the issue
$err = $r->getError();
if (!empty($err))
Antes de PHP 5.5, los documentos PHP solían decir:
vacío() sólo comprueba las variables ya que cualquier otra cosa dará lugar a un error de análisis
En PHP <5.5 no se podía usar empty()
directamente en el valor de retorno de una función. En su lugar, puede asignar el retorno de getError()
a una variable y ejecutarlo empty()
en la variable.
En PHP >= 5.5 esto ya no es necesario.
Normalmente creo una función global llamada is_empty() solo para solucionar este problema
function is_empty($var)
{
return empty($var);
}
Luego, en cualquier lugar donde normalmente habría usado vacío(), solo uso is_empty()
Como han señalado otros, es una limitación (extraña) de vacío().
Para la mayoría de los propósitos, hacer esto equivale a llamar vacío, pero esto funciona:
if ($r->getError() != '')