php類型運算子

來源:互聯網
上載者:User
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)
bool(false)

instanceof 也可用來確定一個變數是不是繼承自某一父類的子類的執行個體:

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 檢查對象不是某個類的執行個體

<?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 = 'MyClass';    $d = 'NotMyClass';    var_dump($a instanceof $b); // $b is an object of class MyClass    var_dump($a instanceof $c); // $c is a string 'MyClass'    var_dump($a instanceof $d); // $d is a string 'NotMyClass'?>

以上常式會輸出:

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: instanceof expects an object instance, constant given

然而 instanceof 的使用還有一些陷阱必須瞭解。在 PHP 5.1.0 之前,如果要檢查的類名稱不存在,instanceof 會調用 __autoload()。另外,如果該類沒有被裝載則會產生一個致命錯誤。可以通過使用動態類引用或用一個包含類名的字串變數來避開這種問題:

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

<?php    $d = 'NotMyClass';    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() 了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.