Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Typ-Operator

PHP-Typ-Operator

伊谢尔伦
伊谢尔伦Original
2016-11-24 13:24:301398Durchsuche

instanceof wird verwendet, um zu bestimmen, ob eine PHP-Variable zu einer Instanz einer bestimmten Klasse gehört:

Beispiel Nr. 1 Verwenden Sie „instanceof“

<?php
    class MyClass
    {
    }
    class NotMyClass
    {
    }
    $a = new MyClass;
    var_dump($a instanceof MyClass);
    var_dump($a instanceof NotMyClass);
?>

für eine Klasse. Die obige Routine wird ausgegeben :

bool(true)
bool(false)

instanceof kann auch verwendet werden, um zu bestimmen, ob eine Variable eine Instanz einer von einer übergeordneten Klasse geerbten Unterklasse ist:

Beispiel #2 Bei Verwendung von „instanceof“

<?php
    class ParentClass
    {
    }
    class MyClass extends ParentClass
    {
    }
    $a = new MyClass;
    var_dump($a instanceof MyClass);
    var_dump($a instanceof ParentClass);
?>

für geerbte Klassen gibt die obige Routine Folgendes aus:

bool(true)
bool(true)

Überprüfen Sie, ob Ein Objekt ist kein bestimmtes Objekt. Für Instanzen einer Klasse können Sie den logischen Operator not verwenden.

Beispiel #3 Verwenden Sie „instanceof“, um zu überprüfen, ob das Objekt keine Instanz einer bestimmten Klasse ist

<?php
    class MyClass
    {
    }
    $a = new MyClass;
    var_dump(!($a instanceof stdClass));
?>

Die obige Routine gibt Folgendes aus:

bool(true)

Schließlich kann „instanceof“ auch verwendet werden, um zu bestimmen, ob eine Variable eine Instanz eines Objekts ist, das eine Schnittstelle implementiert:

Beispiel #4 Verwendung von „instanceof“

<?php
    interface MyInterface
    {
    }
    class MyClass implements MyInterface
    {
    }
    $a = new MyClass;
    var_dump($a instanceof MyClass);
    var_dump($a instanceof MyInterface);
?>

auf einer Schnittstelle Die obige Routine gibt Folgendes aus:
bool(true)
bool(true)

Obwohl „instanceof“ normalerweise direkt mit dem Klassennamen verwendet wird, können auch Objekt- oder Stringvariablen verwendet werden:

<?php
    interface MyInterface
    {
    }
    class MyClass implements MyInterface
    {
    }
    $a = new MyClass;
    $b = new MyClass;
    $c = &#39;MyClass&#39;;
    $d = &#39;NotMyClass&#39;;
    var_dump($a instanceof $b); // $b is an object of class MyClass
    var_dump($a instanceof $c); // $c is a string &#39;MyClass&#39;
    var_dump($a instanceof $d); // $d is a string &#39;NotMyClass&#39;
?>

Oben Beispiel Der Prozess gibt Folgendes aus:

bool(true)
bool(true)
bool(false)

Wenn die getestete Variable dies nicht ist Bei einem Objekt gibt die Instanz von keine Fehlermeldung aus, aber „Ja“ gibt FALSE zurück. Konstanten dürfen nicht erkannt werden.
Beispiel Nr. 6: Verwenden Sie „instanceof“, um andere Variablen zu erkennen.

<?php
    $a = 1;
    $b = NULL;
    $c = imagecreate(5, 5);
    var_dump($a instanceof stdClass); // $a is an integer
    var_dump($b instanceof stdClass); // $b is NULL
    var_dump($c instanceof stdClass); // $c is a resource
    var_dump(FALSE instanceof stdClass);
?>

Die obige Routine gibt Folgendes aus:

bool(false)
bool(false)
bool(false). )
Schwerwiegender PHP-Fehler: Instanz von erwartet eine Objektinstanz, Konstante angegeben

Es gibt jedoch einige Fallen, die bei der Verwendung von Instanz von verstanden werden müssen. Vor PHP 5.1.0 rief die Instanz von __autoload() auf, wenn der zu überprüfende Klassenname nicht existierte. Darüber hinaus wird ein schwerwiegender Fehler generiert, wenn die Klasse nicht geladen wird. Sie können dieses Problem vermeiden, indem Sie eine dynamische Klassenreferenz oder eine String-Variable verwenden, die den Klassennamen enthält:

Beispiel #7 Vermeiden Sie die Suche nach Klassennamen und schwerwiegende Fehler, die durch „instanceof“ in PHP 5.0 verursacht werden

<?php
    $d = &#39;NotMyClass&#39;;
    var_dump($a instanceof $d); // no fatal error here
?>

Die obige Routine gibt Folgendes aus:

bool(false)

instanceof-Operator wurde in PHP 5 eingeführt. Zuvor wurde is_a() verwendet, später wurde is_a() jedoch aufgegeben und durch „instanceof“ ersetzt. Beachten Sie, dass ab PHP 5.3.0 die Verwendung von is_a() wiederhergestellt ist.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn