Eu acho que o seguinte trecho de código deve funcionar, mas não funciona (Editado: Agora funciona no PHP 5.5+) :
if (!empty($r->getError()))
Onde getError()
é simplesmente:
public function getError()
{
return $this->error;
}
No entanto, acabo com este erro:
não é possível usar o valor de retorno do método no contexto de gravação
O que isto significa? Isso não é apenas uma leitura?
empty
: wiki.php.net/rfc/empty_isset_exprsif ( !$e->find('div') )
que verifica se o elemento HTML DOM atual está vazio ou não. Eu o uso dentro do loop para imprimir apenas uma única Div sem a Div interna dentro dela.Respostas:
empty()
precisa acessar o valor por referência (para verificar se essa referência aponta para algo que existe), e o PHP anterior ao 5.5 não suportava referências a valores temporários retornados de funções.No entanto, o verdadeiro problema que você tem é que você usa
empty()
, acreditando equivocadamente que o valor "vazio" é diferente de "falso".Vazio é apenas um apelido para
!isset($thing) || !$thing
. Quando a coisa que você está verificando sempre existe (nos resultados PHP das chamadas de função sempre existem), aempty()
função não passa de um operador de negação .PHP não tem conceito de vazio . Valores que avaliam como falso estão vazios, valores que avaliam como verdadeiro são não vazios. É a mesma coisa. Este código:
e isto:
sempre tem o mesmo resultado, em todos os casos, para todos os tipos de dados (porque
$x
definidoempty()
é redundante).O valor de retorno do método sempre existe (mesmo que você não tenha uma
return
instrução, o valor de retorno existe e contémnull
). Portanto:é logicamente equivalente a:
fonte
(boolean) var
, exceto que nenhum aviso é gerado quando a variável não está definida".""
,0
, etc, são "vazio", mas não nulo.É uma limitação de empty () nas versões do PHP abaixo de 5.5.
Você teria que mudar para isso
fonte
isset()
. ou seja:isset($this->foo->getBar())
resultará no mesmo problema.De acordo com os documentos do PHP :
Você não pode usar
empty()
diretamente no valor de retorno de uma função. Em vez disso, defina o retorno degetError()
como uma variável e executeempty()
a variável.fonte
Eu costumo criar uma função global chamada is_empty () apenas para contornar esse problema
Então, em qualquer lugar que eu normalmente usaria empty (), apenas uso is_empty ()
fonte
!
operador para isso? :)Como apontado por outros, é uma limitação (estranha) de vazio ().
Para a maioria das finalidades, fazer isso é igual a chamar vazio, mas funciona:
fonte
empty()
abrange muitas mais possibilidades do que apenas uma cadeia em brancoO problema é esse, você deseja saber se o erro não está vazio.
Adicionar um método isErrorSet () resolverá o problema.
Agora isso funcionará bem com este código sem aviso prévio.
fonte
A maneira alternativa de verificar se uma matriz está vazia pode ser:
Funciona para mim sem esse erro
fonte