PHP基礎(chǔ)之運(yùn)算符11——類型運(yùn)算符
<?php class MyClass { } class NotMyClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof NotMyClass);?>以上例程會(huì)輸出:bool(true)bool(false)instanceof 也可用來(lái)確定一個(gè)變量是不是繼承自某一父類的子類的實(shí)例:Example #2 對(duì)繼承類使用?instanceof
<?php class ParentClass { } class MyClass extends ParentClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof ParentClass);?>
以上例程會(huì)輸出:
bool(true)bool(true)檢查一個(gè)對(duì)象是否不是某個(gè)類的實(shí)例,可以使用邏輯運(yùn)算符?not。Example #3 使用?instanceof?檢查對(duì)象不是某個(gè)類的實(shí)例
<?php class MyClass { } $a = new MyClass; var_dump(!($a instanceof stdClass));?>
以上例程會(huì)輸出:
bool(true)最后,instanceof也可用于確定一個(gè)變量是不是實(shí)現(xiàn)了某個(gè)接口的對(duì)象的實(shí)例:Example #4 對(duì)接口使用?instanceof
<?php interface MyInterface { } class MyClass implements MyInterface { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof MyInterface);?>以上例程會(huì)輸出:bool(true)bool(true)雖然?instanceof?通常直接與類名一起使用,但也可以使用對(duì)象或字符串變量:
<?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’?>
以上例程會(huì)輸出:
bool(true)bool(true)bool(false)如果被檢測(cè)的變量不是對(duì)象,instanceof 并不發(fā)出任何錯(cuò)誤信息而是返回?FALSE。不允許用來(lái)檢測(cè)常量。Example #6 用?instanceof?檢測(cè)其它變量<?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);?>
以上例程會(huì)輸出:
bool(false)bool(false)bool(false)PHP Fatal error: instanceof expects an object instance, constant given然而 instanceof 的使用還有一些陷阱必須了解。在 PHP 5.1.0 之前,如果要檢查的類名稱不存在,instanceof?會(huì)調(diào)用?__autoload()。另外,如果該類沒(méi)有被裝載則會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤。可以通過(guò)使用動(dòng)態(tài)類引用或用一個(gè)包含類名的字符串變量來(lái)避開這種問(wèn)題:Example #7 避免 PHP 5.0 中 instanceof 引起的類名查找和致命錯(cuò)誤問(wèn)題<?php $d = ’NotMyClass’; var_dump($a instanceof $d); // no fatal error here?>
以上例程會(huì)輸出:
bool(false)instanceof?運(yùn)算符是 PHP 5 引進(jìn)的。在此之前用?is_a(),但是后來(lái)?is_a()?被廢棄而用?instanceof?替代了。注意自 PHP 5.3.0 起,又恢復(fù)使用?is_a()?了。
相關(guān)文章:
1. ASP常用日期格式化函數(shù) FormatDate()2. Jsp中request的3個(gè)基礎(chǔ)實(shí)踐3. 解析原生JS getComputedStyle4. jsp實(shí)現(xiàn)登錄驗(yàn)證的過(guò)濾器5. msxml3.dll 錯(cuò)誤 800c0019 系統(tǒng)錯(cuò)誤:-2146697191解決方法6. 輕松學(xué)習(xí)XML教程7. jsp+servlet簡(jiǎn)單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))8. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)9. ASP基礎(chǔ)入門第八篇(ASP內(nèi)建對(duì)象Application和Session)10. ASP基礎(chǔ)知識(shí)Command對(duì)象講解
