
Extrakun
Creo que el siguiente fragmento de código debería funcionar, pero no es así. (Editado: ahora funciona en PHP 5.5+):
if (!empty($r->getError()))
Donde getError()
es simple:
public function getError()
{
return $this->error;
}
Sin embargo, termino con este error:
no se puede usar el valor de retorno del método en el contexto de escritura
¿Qué significa esto? ¿No es esto solo una lectura?

Kornel
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 tienes es que usas 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), el empty()
la función es nada más que un operador de negación.
PHP no tiene 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) …
posee siempre el mismo resultado, en todos los casos, para todos los tipos de datos (porque $x
se define empty()
es redundante).
El valor de retorno del método siempre existe (incluso si no tiene return
instrucción, el valor devuelto existe y contiene null
). Por lo tanto:
if (!empty($r->getError()))
es lógicamente equivalente a:
if ($r->getError())

pedro bailey
Nota: Esta es una respuesta muy votada con una 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 2: Apoyo las sugerencias de usar la respuesta de @Kornel. Cuando escribí esta respuesta hace tres años, simplemente quise explicar la naturaleza del error, no necesariamente respaldar la alternativa. No se recomienda el fragmento de código siguiente.
es una limitacion de vacío() en versiones de PHP por debajo de 5.5.
Nota: vacío () solo verifica las variables, ya que cualquier otra cosa dará como resultado 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, el los documentos PHP solía decir:
vacío () solo verifica las variables, ya que cualquier otra cosa dará como resultado un error de análisis
En PHP <5.5 no podías usar empty()
directamente en el valor de retorno de una función. En su lugar, podría asignar el retorno de getError()
a una variable y ejecutar 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);
}
Entonces, en cualquier lugar que normalmente hubiera usado vacío (), solo uso is_empty ()
Como señalaron otros, es una limitación (extraña) de vacío().
Para la mayoría de los propósitos, hacer esto es igual a llamar a vacío, pero esto funciona:
if ($r->getError() != '')

Jean Carlo Bambalan
El problema es este, desea saber si el error no está vacío.
public function getError() {
return $this->error;
}
Agregar un método isErrorSet() resolverá el problema.
public function isErrorSet() {
if (isset($this->error) && !empty($this->error)) {
return true;
} else {
return false;
}
}
Ahora esto funcionará bien con este código sin previo aviso.
if (!($x->isErrorSet())) {
echo $x->getError();
}

Miguel
No estoy seguro de si esto sería un error común, pero si haces algo como:
$var="value" .= 'value2';
esto también producirá el mismo error
No se puede usar el valor de retorno del método en el contexto de escritura
no puedes tener un =
y un .=
en la misma declaración. Puedes usar uno u otro, pero no ambos.
Tenga en cuenta que entiendo que esto no está relacionado con el código real de la pregunta; sin embargo, esta pregunta es el resultado principal al buscar el mensaje de error, por lo que quería publicarlo aquí para completarlo.
Probablemente en PHP 5.5 se le permitirá pasar expresiones a
empty
: wiki.php.net/rfc/empty_isset_exprs– Carlos Campderrós
31 de julio de 2012 a las 7:44
La guía definitiva para isset y vacío de PHP
– deceze
♦
31 de julio de 2012 a las 8:04
Ok, encuentro que la respuesta de porneL también es correcta, este es mi código
if ( !$e->find('div') )
que comprueban si el elemento HTML DOM actual está vacío o no. Lo uso dentro del bucle para imprimir solo un solo Div sin Div interno dentro de él.– Salem
22 de junio de 2015 a las 18:17