Sądzę, że następujący fragment kodu powinien działać, ale nie działa (edytowano: Teraz działa w PHP 5.5+) :
if (!empty($r->getError()))
Gdzie getError()
jest po prostu:
public function getError()
{
return $this->error;
}
Jednak kończę na tym błędzie:
nie można użyć wartości zwracanej przez metodę w kontekście zapisu
Co to znaczy? Czy to nie tylko czytanie?
empty
: wiki.php.net/rfc/empty_isset_exprsif ( !$e->find('div') )
który sprawdza, czy bieżący element DOM HTML jest pusty, czy nie. Używam go w wewnętrznej pętli, aby wydrukować tylko jedną div bez wewnętrznej div.Odpowiedzi:
empty()
musi uzyskać dostęp do wartości przez referencję (w celu sprawdzenia, czy ta referencja wskazuje na coś, co istnieje), a PHP przed 5.5 nie obsługiwał referencji do wartości tymczasowych zwracanych z funkcji.Jednak prawdziwym problemem jest to, że
empty()
w ogóle go używasz , błędnie wierząc, że „pusta” wartość różni się od „fałszywej”.Pusty to tylko alias
!isset($thing) || !$thing
. Kiedy rzecz, którą sprawdzasz, zawsze istnieje (w PHP zawsze istnieją wyniki wywołań funkcji),empty()
funkcja jest tylko operatorem negacji .PHP nie ma pojęcia pustki . Wartości, które mają wartość false, są puste, wartości, które mają wartość true, są niepuste. To jest to samo. Ten kod:
i to:
ma zawsze ten sam wynik we wszystkich przypadkach dla wszystkich typów danych (ponieważ
$x
jest zdefiniowanyempty()
jest nadmiarowy).Zwracana wartość z metody zawsze istnieje (nawet jeśli nie masz
return
instrukcji, zwracana wartość istnieje i zawieranull
). W związku z tym:jest logicznie równoważne z:
źródło
(boolean) var
, z wyjątkiem tego, że nie jest generowane ostrzeżenie, gdy zmienna nie jest ustawiona”.""
,0
itp są „puste”, ale nie zerowa.Jest to ograniczenie funkcji empty () w wersjach PHP poniżej 5.5.
Musisz to zmienić
źródło
isset()
. tzn .:isset($this->foo->getBar())
spowoduje ten sam problem.Według dokumentów PHP :
Nie można użyć
empty()
bezpośrednio na wartości zwracanej przez funkcję. Zamiast tego ustaw return fromgetError()
na zmienną i uruchomempty()
na zmiennej.źródło
Zwykle tworzę funkcję globalną o nazwie is_empty (), aby obejść ten problem
Wtedy gdziekolwiek normalnie użyłbym pustego () Po prostu używam is_empty ()
źródło
!
do tego operatora? :)Jak zauważyli inni, jest to (dziwne) ograniczenie pustych ().
W przypadku większości purproses zrobienie tego jest równoznaczne z wywołaniem pustego, ale działa to:
źródło
empty()
obejmuje o wiele więcej możliwości niż tylko pusty ciągProblem polega na tym, że chcesz wiedzieć, czy błąd nie jest pusty.
Dodanie metody isErrorSet () rozwiąże problem.
Teraz będzie działać dobrze z tym kodem bez powiadomienia.
źródło
Alternatywnym sposobem sprawdzenia, czy tablica jest pusta, może być:
Działa dla mnie bez tego błędu
źródło