首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP instanceof 關鍵字完整指南:類型檢查與介面驗證

     編輯:PHP 相關知識

基本用法

instanceof 用於判斷物件是否為特定類別的實例、子類別實例,或是否實作某介面。PHP 5 引入。

<?php
$manager = new Employee();
if ($manager instanceof Employee) {
    echo "Yes";
}
?>

注意:類別名稱不加引號,加引號會導致語法錯誤。

三大檢查場景

  1. 實例類型:$obj instanceof ClassName
  2. 繼承關係:子類別實例 instanceof 父類別回傳 true
  3. 介面實作:$obj instanceof InterfaceName

進階範例

<?php
class Test {}
class TestChild extends Test {}
interface ExampleInterface { public function interfaceMethod(); }
class ExampleClass implements ExampleInterface {
    public function interfaceMethod() { return 'Hello World!'; }
}

$a = new Test();
$m = new Test();
$d = new TestChild();
$ex = new ExampleClass();

// 基本判斷
var_dump($m instanceof Test);        // true
var_dump($d instanceof Test);        // true (子類別)

// switch 搭配
switch ($a instanceof Test) {
    case true:  echo 'YES'; break;
    case false: echo 'No'; break;
}

// 介面判斷
if ($ex instanceof ExampleInterface) {
    echo 'Yes, it is';
}
?>

instanceof vs is_subclass_of()

關鍵差異:instanceof 包含自身類別,is_subclass_of() 僅檢查繼承關係(不含自身)。

<?php
class Foo { public $foobar = 'Foo'; }
class Bar extends Foo { public $foobar = 'Bar'; }

$a = new Foo();
$b = new Bar();

var_dump($a instanceof Foo);   // true
var_dump($b instanceof Foo);   // true
var_dump(is_subclass_of($a, 'Foo')); // false
var_dump(is_subclass_of($b, 'Foo')); // true
?>

同理,$a instanceof Bar 為 false,is_subclass_of($a, 'Bar') 也為 false。

多物件處理策略

搭配 switch 或 if-else 鏈,根據物件類型執行不同邏輯,常見於多型處理場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved