Property_Exists () wird verwendet, um festzustellen, ob ein Objekt über eine bestimmte Eigenschaft verfügt, unabhängig davon, ob der Wert der Eigenschaft null ist, und es gibt True zurück, solange er existiert (ob es zugewiesen ist oder nicht).
Grammatik:
property_exists(object|string $object_or_class, string $property): bool
Beispiel:
class User {
public $name;
private $email;
}
$user = new User();
var_dump(property_exists($user, 'name')); // true
var_dump(property_exists($user, 'email')); // true
var_dump(property_exists($user, 'age')); // false
Wie aus dem obigen Beispiel ersichtlich ist, können Property_Exists () eine Privateigentum erkennen. Solange die Eigenschaft in der Klasse existiert, wird es unabhängig von ihrer Sichtbarkeit und ob es zugewiesen.
Vorteil:
Kann alle Sichtbarkeitseigenschaften (öffentlich, geschützt, privat) erkennen.
Es ist es egal, ob das Attribut zugewiesen wird, auch wenn es null ist, kann beurteilt werden, dass es existieren.
Mangel:
Es ist unmöglich festzustellen, ob das Attribut initialisiert wurde. Es kann nur bestimmen, ob es deklariert ist.
ISSET () tritt häufiger bei der Bestimmung, ob eine Variable zugewiesen und nicht null ist. Es kann auch zur Erkennung von Objekteigenschaften verwendet werden.
Grammatik:
isset(mixed $var): bool
Beispiel:
class User {
public $name;
public $email = null;
}
$user = new User();
var_dump(isset($user->name)); // false
var_dump(isset($user->email)); // false
$user->name = 'Tom';
var_dump(isset($user->name)); // true
Vorteil:
Kann bestimmen, ob das Attribut zugewiesen und nicht null ist.
Es wird häufiger in einigen logischen Urteilen verwendet, um die Datenverfügbarkeit zu bestätigen.
Mangel:
Private oder geschützte Eigenschaften können nicht erkannt werden (wenn er außerhalb der Klasse zugegriffen wird).
Wenn das Attribut vorhanden ist, aber null ist, ist das Ergebnis immer noch falsch , was zu einer Fehleinschätzung führen kann.
Vergleichen | Property_Exists () | isset () |
---|---|---|
Ob das Attribut existiert | ? Ja | ? Wenn das Attribut nicht zugewiesen ist oder NULL ist, geben Sie Falsch zurück |
Ist das Attribut null | ? Nicht betroffen | ? Wird dazu führen, dass falsch zurückgegeben wird |
Private/schützende Attributerkennung | ? Kann | ? Kann nicht außerhalb der Klasse zugreifen |
Verwendet für das Datenbeurteilung | ? Nicht empfohlen | ? Häufig verwendet |
Zum Nachdenken, Debuggen | ? Genauer | ? Nicht streng genug |
Szenario 1: Bestimmen Sie, ob ein bestimmtes Attribut in der Klasse deklariert ist
Die Verwendung von Property_Exists () ist zuverlässiger:
if (property_exists($user, 'name')) {
echo "Das Attribut existiert";
}
Szenario 2: Stellen Sie fest, ob ein bestimmtes Attribut zugewiesen wurde
Es ist angemessener, ISSet () zu verwenden:
if (isset($user->name)) {
echo "Das Attribut wurde zugewiesen und nicht null";
}
Szenario 3: Erkennen von JSON -Mapping -Objekteigenschaften über API
Bei der Verarbeitung von JSON -Datenzuordnung zu PHP -Objekten kann die Eigenschaft null sein:
$json = '{"title": null}';
$data = json_decode($json);
var_dump(property_exists($data, 'title')); // true
var_dump(isset($data->title)); // false
Dieses Beispiel zeigt deutlich, dass Property_Exists () Deklarationen erkennt, während ISSET () den Zuordnungsstatus erkennt.
In den meisten Fällen ist der Leistungsunterschied zwischen beiden nicht groß, aber ISSET () ist eine Sprachstruktur, die etwas schneller als Property_Exists () (Funktion) ist. In Anbetracht der Genauigkeit wird jedoch empfohlen, Funktionen mit expliziterer Semantik zu wählen, wenn es um Typurteil und Objektstruktur geht.
Wenn die Leistungsanforderungen extrem hoch sind und die Struktur garantiert zuverlässig ist, kann ISSet () zur schnellen Erkennung verwendet werden. Wenn Sie jedoch strenge Erkennung von Eigenschaftserklärungen erkennen müssen, sollte Property_Exists () weiterhin verwendet werden.
brauchen | Empfohlene Funktionen |
---|---|
Bestimmen Sie, ob das Attribut in der Klasse vorhanden ist | Property_Exists () |
Stellen Sie fest, ob das Attribut zugewiesen wurde und nicht null ist | isset () |
Behandeln Sie die Objektstruktur, Reflexion oder Codegenerator um | Property_Exists () |
Logische Urteile oder Datenüberprüfung vornehmen | isset () |
Wenn Sie in der tatsächlichen Entwicklung einen erholsamen API -Client erstellen, müssen Sie feststellen, ob die JSON -Antwort ein bestimmtes Feld enthält. Auch wenn der Feldwert null ist, sollten Sie Property_Exists () verwenden, um die Kompatibilität sicherzustellen. Zum Beispiel, um festzustellen, ob ein Fehlermeldungsfeld vorliegt:
if (property_exists($response, 'error')) {
// Fehlermeldungen verarbeiten
}
Wenn Sie sich nur auf Daten konzentrieren, die für ein Feld sinnvoll sind, z. B. nicht leere Zeichenfolgen oder gültige Zahlen, können Sie ISSET () verwenden:
if (isset($response->data->url)) {
$url = $response->data->url;
header("Location: https://gitbox.net/redirect?url=" . urlencode($url));
}