tutorial sirve que programacion para lenguaje descargar caracteristicas php

sirve - php tutorial



No se puede usar el valor de retorno del método en el contexto de escritura (7)

Nota: Esta es una respuesta muy votada con una alta visibilidad, pero tenga en cuenta que promueve prácticas de codificación malas e innecesarias. Ver la respuesta de @ Kornel para la forma correcta.

Nota # 2: Respaldo las sugerencias para usar la respuesta de @ Kornel . Cuando escribí esta respuesta hace tres años, solo querí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 empty() en versiones de PHP por debajo de 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 (recortar ($ nombre)).

Tendrías que cambiar a esto

// Not recommended, just illustrates the issue $err = $r->getError(); if (!empty($err))

Creo que el siguiente fragmento de código debería funcionar, pero no lo hace (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?


Como han señalado otros, es una limitación (extraña) de vacío ().

Para la mayoría de los purproses, hacer esto es igual que llamar vacío, pero esto funciona:

if ($r->getError() != '''')


El problema es este, usted quiere 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(); }


La forma alternativa de verificar si una matriz está vacía podría ser:

count($array)>0

Funciona para mí sin ese error.


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 empty (), solo uso is_empty ()


Según los documentos PHP :

empty () solo verifica las variables ya que cualquier otra cosa resultará en un error de análisis

No puede usar empty() directamente en el valor de retorno de una función. En su lugar, establezca el retorno de getError() a una variable y ejecute empty() en la variable.


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 las funciones.

Sin embargo, el problema real que tiene es que utiliza empty() , creyendo erróneamente que el valor "vacío" es diferente de "falso".

Vacío es solo un alias para !isset($thing) || !$thing !isset($thing) || !$thing . Cuando lo que está verificando siempre existe (en PHP siempre hay resultados de llamadas a funciones), la función empty() no es más que un operador de negación .

PHP no tiene concepto de vacío . Los valores que se evalúan como falsos están vacíos, los valores que se evalúan como verdaderos son no vacíos. Es lo mismo. Este codigo

$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 se define empty() es redundante).

El valor de retorno del método siempre existe (incluso si no tiene una declaración de retorno, el valor de retorno existe y contiene un valor null ). Por lo tanto:

if (!empty($r->getError()))

es lógicamente equivalente a:

if ($r->getError())