型別運算子(Type Operator)

型別運算子是基於物件導向而生的,如果新手看不懂可以先略過,等講到物件導向的部分再回來看

型別運算子使用的語法不是符號,而是instanceof

instanceof是用來判斷變數是否屬於某個類別 (class) 、繼承自某父類別 (parent class) 、實作某介面 (interface)

變數如果繼承自某個類別(class)或實作於某個介面(Interface),判斷結果會回傳true

另外,除了使用類別(class)名稱或是介面(interface)名稱以外,還可使用另一個物件或字串來判斷

<?php
    class ParentClass {}
    class ChildClass1 extends ParentClass {}
    interface TheInterface {}
    class ChildClass2 implements TheInterface {}

    $child1 = new ChildClass1();
    $child2 = new ChildClass2();

    var_dump($child1 instanceof ChildClass1);          // bool(true)
    var_dump($child1 instanceof ChildClass2);          // bool(false)
    var_dump($child1 instanceof ParentClass);          // bool(true)
    var_dump($child1 instanceof NoClass);              // bool(false),NoClass這個類別不存在,所以回傳false

    var_dump($child2 instanceof ChildClass2);          // bool(true)
    var_dump($child2 instanceof TheInterface);         // bool(true)

    $x = new ChildClass1();
    $childClassname = 'ChildClass1';

    var_dump($child1 instanceof $x);                   // bool(true),相同類別
    var_dump($child1 instanceof $childClassname);      // bool(true),直接用類別名稱字串也可以
?>

而除了使用instanceof外,PHP也提供了is_a()函數來達到一樣的效果

is_a()的限制是最後一個傳入的參數要是類別名稱字串,不能直接用類別名稱

<?php
 class TheClass {}

 $theClass = new TheClass;

 var_dump(is_a($theClass, 'TheClass')); // bool(true)
?>

results matching ""

    No results matching ""