php類型運算符

伊谢尔伦
發布: 2016-11-24 13:24:30
原創
1443 人瀏覽過

instanceof 用來判斷一個 PHP 變數是否屬於某一類 class 的實例:

Example #1 對類別使用 instanceof

<?php
    class MyClass
    {
    }
    class NotMyClass
    {
    }
    $a = new MyClass;
    var_dump($a instanceof MyClass);
    var_dump($a instanceof NotMyClass);
?>
登入後複製

以上例程會輸出:

bool(true)

)也請問可用來決定一個變數是不是繼承自某一父類別的子類別的實例:

Example #2 對繼承類別使用 instanceof

<?php
    class ParentClass
    {
    }
    class MyClass extends ParentClass
    {
    }
    $a = new MyClass;
    var_dump($a instanceof MyClass);
    var_dump($a instanceof ParentClass);
?>
登入後複製

以上程式會輸出:

bool(true)

bool(true)

檢查一個物件是否不是某個類別的實例,可以使用邏輯運算子 not。

Example #3 使用 instanceof 檢查物件不是某個類別的實例
Example #3 使用 instanceof 檢查物件不是某個類別的實例

<?php
    class MyClass
    {
    }
    $a = new MyClass;
    var_dump(!($a instanceof stdClass));
?>
登入後複製

以上例程會輸出:

bool(true)

最後,instanceof也可用於確定一個變數是不是實現了某個介面的物件的實例:

Example #4 對介面使用 instanceof

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

以上程式會輸出:

bool(true)

bool(true)

雖然 或instanceof 通常直接與類別名稱一起使用,但也可以使用物件或字元字串變數:

<?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;
?>
登入後複製

以上例程會輸出:

bool(true)

bool(true)

bool(false)

如果被偵測的變數不是對象,instanceof 不會發出任何錯誤訊息而是傳回 FALSE。不允許用來檢測常數。
Example #6 用 instanceof 檢測其它變數

<?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);
?>
登入後複製

以上程式會輸出:

bool(false)

bool(false)

bool(false)
PHP Fatal error: instast
bool(false) instanceof 的使用還有一些陷阱必須要了解。在 PHP 5.1.0 之前,如果要檢查的類別名稱不存在,instanceof 會呼叫 __autoload()。另外,如果該類別沒有被裝載則會產生一個致命錯誤。可以透過使用動態類別參考或用一個包含類別名稱的字串變數來避開這種問題:

Example #7 避免PHP 5.0 中instanceof 引起的類別名稱查找和致命錯誤問題

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

以上例程會輸出:
bool(false)

instanceof 運算子是PHP 5 引進的。在此之前用 is_a(),但後來 is_a() 被廢棄而用 instanceof 取代了。注意自 PHP 5.3.0 起,又恢復使用 is_a() 了。

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!