1. 程式人生 > >PHP類/物件函式

PHP類/物件函式

__autoload:嘗試載入未定義的類。通過定義此函式來啟動類的自動載入

call_user_method_array:以引數列表的陣列,呼叫使用者方法。接受三個引數,第一個為要呼叫的方法名稱,第二個引數為要呼叫方法的物件,第三個引數為陣列形式的一組引數。此函式PHP4.1棄用,PHP7.0移除。替代函式為call_user_func_array。

call_user_method:與call_user_method_array類似,唯一不同是引數不是以陣列形式傳遞的。此函式PHP4.1棄用,PHP7.0移除。替代函式為call_user_func。

class_alias:為一個類建立別名。接受三個引數,第一個為原始類名,第二個為類的別名,第三個為可選的引數表示如果原始類沒有載入,是否使用自動載入,預設為true。成功返回true,失敗返回false。

class_exists:檢查類是否已定義,接受兩個引數,第一個引數為類名,第二個為可選引數,表示如果類未定義則是否自動載入,預設為true。如果指定的類已定義則返回true,否則返回false。此函式也可以用於檢查class_alias定義的別名。PHP5.0.2起,介面定義的檢查使用interface_exists。

interface_exists:檢查介面是否已被定義,與class_exists的唯一不同是,此函式用於檢查介面。

get_called_class:返回後期靜態繫結的類的名稱,如果不是在類中呼叫此函式則返回false。

get_class_methods:返回由類的方法名組成的陣列。可以傳入類名或者類的例項。如果執行失敗則返回null。返回的陣列中包含的方法名取決於呼叫此函式的位置。如果是在類外呼叫,則只返回public的方法名。在類內部則返回全部的方法名。

get_class_vars:返回指定類名的類中屬性的陣列,其中鍵為屬性名,值為屬性值。PHP5.0.1之前無論在何處呼叫都返回所有的屬性。PHP5.0.2也會返回所有屬性,但是protected和private屬性的名字會加上null位元組字首。PHP5.0.3之後返回的屬性取決於呼叫的位置類似於get_class_methods。如果出現錯誤則返回false。

get_class:返回指定物件例項所屬類的名字,PHP5.3起預設值為null。如果傳入的不是物件則返回false。如果在類中呼叫可以不傳引數,返回的是當前所在類的名字。如果傳入的不是物件或者在類外呼叫時傳入null會產生E_WARNING錯誤警告。在類中傳入null與不傳引數是一樣的。

get_declared_classes:返回由當前指令碼中已定義類的名字組成的陣列。

get_declared_interfaces:返回由當前指令碼中已定義的介面名字組成的陣列。

get_declared_traits:返回所有已定義的traits的陣列,若失敗則返回false。

get_object_vars:返回由物件屬性組成的陣列,其中鍵為屬性名,值為屬性值。PHP4.2之前若物件中屬性沒有被賦值則不會返回,之後會將沒有賦值的屬性賦值為null,然後返回。PHP5.3之前如果傳入的不是物件,則返回false,之後則返回null。

get_parent_class:返回物件或類的父類名。PHP4.0.5起,如果傳入的是字串,則返回以字串為名的類的父類的類名。PHP5起,如果在物件的方法中呼叫此函式,則可以不傳引數。PHP5.1之前如果在物件外呼叫函式時未傳引數,則會返回null併產生警告,之後則返回false。如果指定的類不存在,或者其父類不存在,則返回false。

is_a:判斷物件是否屬於指定類,或者指定類是該物件所屬類的父類。如果是則返回true。接受三個引數,第一個為要進行判斷的物件,第二個引數是型別,第三個是PHP5.3.9加入的可選引數,如果設定為false,則當第一個引數傳入字串時,不會呼叫自動載入函式,預設為false。此函式在PHP5.0被廢棄,呼叫此函式會產生E_STRICT警告,PHP5.3後又恢復。

is_subclass_of:與is_a類似,不同之處在於判斷是否是父子關係。不同的是此函式的可選引數預設為true。

method_exists:檢查類中是否存在指定方法。如果指定的類未定義會呼叫自動載入函式。

property_exists:檢查類中是否存在指定屬性。此函式無法檢測過載的屬性。如果指定的類未定義會呼叫自動載入函式。PHP5.3起,屬性的檢查不受可見性的約束。若存在返回true,不存在返回false,發生錯誤返回null。

trait_exists:檢查是否存在指定的trait。接受兩個引數,第一個為trait的名字,第二個為可選的引數,如果為false,則指定的trait不存在時不會呼叫自動載入函式,預設為true。

<?php
interface ITest{
    
}
class A{
    function foo($arg,$arg2){
        echo "$arg,$arg2\n";
    }
    function bar($arg,$arg2){
        echo "$arg,$arg2\n";
    }
    function who(){
        echo "parent:".__CLASS__."\n";
    }
    function test(){
        static::who();
        echo get_called_class()."\n";
    }
}

class B extends A{
    private $var="a";
    protected $var2="a2";
    public $var3="a3";
    function who(){
        echo "child:".__CLASS__."\n";
    }
    private function foo2(){
    }
    
    protected function bar2(){
    }
    
    function __construct(){
        echo "in construct:\n";
        var_dump(get_class_methods($this));
        var_dump(get_class_vars(__CLASS__));
        echo get_class()."\n";
        var_dump(get_object_vars($this));
    }
}
trait Mytrait{
    function test(){
        
    }
}
call_user_method_array("foo",new A(),array("a","a2"));
call_user_method("foo",new A(),"a","a2");
 class_alias("A","AA");
var_dump(get_class(new A())===get_class(new AA()));
var_dump(new A() instanceof AA);
var_dump(class_exists("AA"));
class_alias("ITest","MyTest");
var_dump(interface_exists("ITest"));
var_dump(interface_exists("MyTest"));
$b=new B();
$b->test();
 $a=new A();
$a->test();
print_r(get_class_methods($b));
print_r(get_class_vars("B"));
echo get_class($a);
print_r(get_declared_classes());
print_r(get_declared_interfaces()); 
print_r(get_declared_traits());
print_r(get_object_vars($b));
echo get_parent_class("B")."\n";
var_dump(get_parent_class());
var_dump(get_parent_class("A"));
var_dump(is_a($b,"A"));
var_dump(is_a("B","A",true));
var_dump(is_subclass_of ("B","A")); 
var_dump(is_subclass_of ("B","A",false)); 
var_dump(is_subclass_of ($b,"A",false)); 
var_dump(method_exists($b,"foo"));
var_dump(method_exists("B","foo"));
var_dump(property_exists ("B","var"));
var_dump(property_exists ("B","var2"));
var_dump(property_exists ("B","var3"));
var_dump(trait_exists("Mytrait",false));
?>