Ich verstehe, dass PHP keine reine Objektvariable hat, aber ich möchte überprüfen, ob sich eine Eigenschaft in dem angegebenen Objekt oder der angegebenen Klasse befindet.
$ob = (object) array('a' => 1, 'b' => 12);
oder
$ob = new stdClass;
$ob->a = 1;
$ob->b = 2;
In JS kann ich dies schreiben, um zu überprüfen, ob eine Variable a
in einem Objekt vorhanden ist:
if ('a' in ob)
In PHPKann so etwas gemacht werden?
Vielen Dank für Ihren Rat.
Antworten:
property_exists (gemischte $ class, string $ property)
isset (gemischte $ var [, gemischte $ ...])
Beispiel 1:
Beispiel 2:
quelle
empty()
eine bessere Lösung ist?!empty($var)
?Mit der Funktion können Sie überprüfen, ob die Eigenschaft vorhanden ist und ob sie auch null ist
property_exists()
.Dokumente: http://php.net/manual/en/function.property-exists.php
Im Gegensatz zu isset () gibt property_exists () TRUE zurück, auch wenn die Eigenschaft den Wert NULL hat.
Beispiel:
quelle
Weder isset noch property_exists funktionieren für mich.
Am Ende ging ich mit:
Beispiel:
quelle
Lösung
echo $person->middleName ?? 'Person does not have a middle name';
Um zu zeigen, wie dies in einer if-Anweisung aussehen würde, um mehr Klarheit darüber zu erhalten, wie dies funktioniert.
Erläuterung
Die traditionelle PHP-Methode, um die Existenz von etwas zu überprüfen, besteht darin, Folgendes zu tun:
ODER für einen klassenspezifischeren Weg:
Diese sind beide in langen Aussagen in Ordnung, aber in ternären Aussagen werden sie unnötig umständlich wie folgt:
isset($person->middleName) ? echo $person->middleName : echo 'Person does not have a middle name';
Sie können dies auch nur mit dem ternären Operator erreichen:
echo $person->middleName ?: 'Person does not have a middle name';
Aber ... wenn der Wert nicht existiert (nicht gesetzt ist), wird ein ausgelöst
E_NOTICE
und dies ist keine bewährte Methode. Wenn der Wert istnull
, wird die Ausnahme nicht ausgelöst.Daher ternäre Bediener zur Rettung machen dies eine nette kleine Antwort:
echo $person->middleName ?? 'Person does not have a middle name';
quelle
Wenn Sie wissen möchten, ob eine Eigenschaft in einer Instanz einer von Ihnen definierten Klasse vorhanden ist, kombinieren Sie sie einfach
property_exists()
mitisset()
.quelle
property_exists($this, $property)
ist hier irgendwie überflüssig, da Ihr Code immer das gleiche Ergebnis wieisset($this->$property)
allein hat.isset()
nicht feststellen können, ob eine Eigenschaft ein echtes Mitglied der Klassendefinition ist. Ich werde später noch einmal nachsehen, um sicherzugehen.__get()
und vor allem__isset()
magische Methoden haben, ist die Ausgabe in einigen Fällen unterschiedlich.Um zu überprüfen, ob etwas beendet wird, können Sie die PHP-Funktion isset () verwenden, siehe php.net . Diese Funktion prüft, ob die Variable gesetzt und nicht NULL ist.
Beispiel:
Wenn Sie überprüfen müssen, ob eine Eigenschaft in einer Klasse vorhanden ist, können Sie die eingebaute Funktion property_exists () verwenden.
Beispiel:
quelle
Die Verwendung von array_key_exists () für Objekte ist in PHP 7.4 veraltet
Stattdessen sollte entweder isset () oder property_exists () verwendet werden
Referenz: php.net
quelle
Ich lege nur meine 2 Cent hierher.
Gegeben die folgende Klasse:
Folgendes wird passieren:
Hoffe das wird jedem helfen
quelle