instanceof 用于確定一個 PHP 變量是否屬于某一類 class 的實例:
### 對類使用 instanceof
~~~
<?php
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>
~~~
以上例程會輸出:
>bool(true)
bool(false)
instanceof 也可用來確定一個變量是不是繼承自某一父類的子類的實例:
### 對繼承類使用 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。
### 使用 instanceof 檢查對象不是某個類的實例
~~~
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
~~~
以上例程會輸出:
>bool(true)
最后,instanceof也可用于確定一個變量是不是實現了某個接口的對象的實例:
### 對接口使用 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 通常直接與類名一起使用,但也可以使用對象或字符串變量:
### 對其它變量使用 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。不允許用來檢測常量。
### 用 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()。另外,如果該類沒有被裝載則會產生一個致命錯誤。可以通過使用動態類引用或用一個包含類名的字符串變量來避開這種問題:
### 避免 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()了。
參見** get_class()** 和 **is_a()**。
- 入門指引
- 簡介
- PHP是什么
- PHP能做什么
- 簡明教程
- 學PHP需要什么
- 我的第一個PHP頁面
- 實用的PHP腳步
- PHP是如何處理表單的
- 在新版本的PHP如何實用舊的PHP代碼
- 下一步需要做什么
- PHP語言參考
- PHP基本語法
- PHP標記
- PHP多進程管理-pcntl_fork
- PHP文件上傳易犯錯誤
- PHP從HTML中分離
- PHP的指令分隔符
- PHP序列化serialize
- PHP類常量
- PHP Traits
- 從 HTML 中分離
- 注釋
- PHP數據類型
- PHP支持的類型簡介
- 布爾類型(Boolean)就是易經知識
- 整型(integer)即整數
- 浮點型(float)
- 字符串(string)
- 數組(Array)
- 對象(object)一定要搞
- 資源類型(resource)
- PHP安裝與環境配置
- 安裝前需要考慮的事項
- Unix系統下安裝PHP
- Unix 系統下安裝 Apache 1.3.x
- Unix 系統下安裝 Apache 2.x
- Unix 系統下安裝 Nginx 1.4.x
- Unix 平臺安裝 Lighttpd 1.4
- Sun Solaris 上的 Sun、iPlanet 和 Netscape 服務器
- CGI 命令行設置
- 針對 HP-UX 平臺的安裝提示
- 在 OpenBSD 系統下的安裝PHP
- Debian GNU/Linux 安裝說明
- 在Mac OS X 系統下安裝PHP
- 使用軟件包
- 使用內置的 PHP
- Windows 系統下的安裝
- 云計算平臺上的安裝
- Microsoft Azure
- 在亞馬遜(Amazon EC2)安裝PHP
- PHP語法參考
- 類型
- NULL
- Callback 回調類型
- 本文檔中使用的偽類型與變量
- 類型轉換的判別
- PHP 類型比較表
- 常量和變量
- 語法基礎
- 預定義變量
- 變量范圍
- 可變變量
- 外部變量
- 常量
- 語法
- 魔術常量
- PHP表達式&運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- continue
- switch
- declare
- return
- require
- include
- require_once