Creo que el siguiente fragmento de código debería funcionar, pero no funciona (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 usar el valor de retorno del método en el contexto de escritura
¿Qué significa esto? ¿No es esto solo una lectura?
empty
: wiki.php.net/rfc/empty_isset_exprsif ( !$e->find('div') )
que comprueba si el elemento DOM HTML actual está vacío o no. Lo uso dentro del bucle para imprimir solo un Div sin Div interno dentro de él.Respuestas:
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), laempty()
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:
y esto:
siempre tiene el mismo resultado, en todos los casos, para todos los tipos de datos (porque
$x
está definidoempty()
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 contienenull
). Por lo tanto:es lógicamente equivalente a:
fuente
(boolean) var
, excepto que no se genera ninguna advertencia cuando no se establece la variable".""
,0
, etc. son "vacío", pero no nula.Es una limitación de empty () en versiones de PHP inferiores a 5.5.
Tendrías que cambiar a esto
fuente
isset()
. es decir:isset($this->foo->getBar())
dará como resultado el mismo problema.De acuerdo con los documentos PHP :
No se puede usar
empty()
directamente en el valor de retorno de una función. En su lugar, establezca el retorno desdegetError()
a una variable y ejecúteloempty()
en la variable.fuente
Por lo general, creo una función global llamada is_empty () solo para solucionar este problema
Luego, en cualquier lugar donde normalmente hubiera usado empty (), solo uso is_empty ()
fuente
!
operador para esto? :)Como señalaron otros, es una limitación (extraña) de empty ().
Para la mayoría de los purproses, hacer esto es igual a llamar a empty, pero esto funciona:
fuente
empty()
cubre muchas más posibilidades que solo una cadena en blancoEl problema es este, desea saber si el error no está vacío.
Agregar un método isErrorSet () resolverá el problema.
Ahora esto funcionará bien con este código sin previo aviso.
fuente
La forma alternativa de verificar si una matriz está vacía podría ser:
Funciona para mí sin ese error
fuente