Ich würde denken, dass der folgende Code funktionieren sollte, aber er funktioniert nicht (Bearbeitet: Funktioniert jetzt in PHP 5.5+) :
if (!empty($r->getError()))
Wo getError()
ist einfach:
public function getError()
{
return $this->error;
}
Dennoch habe ich diesen Fehler:
Der Methodenrückgabewert kann im Schreibkontext nicht verwendet werden
Was bedeutet das? Ist das nicht nur eine Lektüre?
empty
folgende Adresse übergebenif ( !$e->find('div') )
, der prüft, ob das aktuelle HTML-DOM-Element leer ist oder nicht. Ich benutze es innerhalb der Schleife, um nur einzelne Div ohne innere Div darin auszudrucken.Antworten:
empty()
muss auf den Wert als Referenz zugreifen (um zu überprüfen, ob diese Referenz auf etwas verweist, das vorhanden ist), und PHP vor 5.5 unterstützte keine Verweise auf temporäre Werte, die von Funktionen zurückgegeben wurden.Das eigentliche Problem, das Sie haben, ist jedoch, dass Sie es
empty()
überhaupt verwenden und fälschlicherweise glauben, dass sich der "leere" Wert von "falsch" unterscheidet.Leer ist nur ein Alias für
!isset($thing) || !$thing
. Wenn das, was Sie überprüfen, immer vorhanden ist (in PHP sind immer Ergebnisse von Funktionsaufrufen vorhanden), ist dieempty()
Funktion nichts anderes als ein Negationsoperator .PHP hat kein Konzept von Leere . Werte, die als falsch ausgewertet werden, sind leer, Werte, die als wahr ausgewertet werden, sind nicht leer. Das ist gleich. Dieser Code:
und das:
hat in allen Fällen für alle Datentypen immer das gleiche Ergebnis (da
$x
definiertempty()
redundant ist).Der Rückgabewert der Methode ist immer vorhanden (auch wenn Sie keine
return
Anweisung haben, ist der Rückgabewert vorhanden und enthältnull
). Deshalb:ist logisch äquivalent zu:
quelle
(boolean) var
, außer dass keine Warnung generiert wird, wenn die Variable nicht gesetzt ist."""
,0
usw. „leer“ ist, aber nicht null.Es ist eine Einschränkung von empty () in PHP-Versionen unter 5.5.
Das müsstest du ändern
quelle
isset()
. dh:isset($this->foo->getBar())
führt zum gleichen Problem.Laut den PHP-Dokumenten :
Sie können
empty()
den Rückgabewert einer Funktion nicht direkt verwenden. Setzen Sie stattdessen die Rückgabe vongetError()
auf eine Variable und führen Sie sieempty()
für die Variable aus.quelle
Normalerweise erstelle ich eine globale Funktion namens is_empty (), um dieses Problem zu umgehen
Dann verwende ich überall dort, wo ich normalerweise leer () verwendet hätte, nur is_empty ()
quelle
!
Operator dafür hat? :)Wie von anderen betont, ist es eine (seltsame) Einschränkung von leer ().
Für die meisten Zwecke ist dies gleichbedeutend mit einem leeren Aufruf, aber dies funktioniert:
quelle
empty()
deckt viel mehr Möglichkeiten als nur eine leere ZeichenfolgeDas Problem ist, dass Sie wissen möchten, ob der Fehler nicht leer ist.
Das Hinzufügen einer Methode isErrorSet () löst das Problem.
Jetzt funktioniert dies mit diesem Code ohne Vorankündigung.
quelle
Die alternative Methode zum Überprüfen, ob ein Array leer ist, könnte sein:
Es funktioniert bei mir ohne diesen Fehler
quelle