您好,登錄后才能下訂單哦!
一. OOP 的魔術方法 PHP引入了__autoload()內置方法來自動包含類文件。__autoload()應該被寫成單個參 數的方法。當PHP引擎遇到試圖實例化未知類的操作時,會調用__autoload()方法,并將類 名當作字符串參數傳遞給它。 function __autoload($_className) { require $_className.'.class.php'; } $demo = new Computer(); PHP采用了__call()內置方法來屏蔽對象調用方法時產生的錯誤。當對象調用一個不存 在的方法時,會自動調用__call()方法。 private function __call($_methodName,$args) { echo $_methodName.'方法不存在'; print_r($args); } $computer->go('我',1,'知道'); PHP使用__toString()內置方法來打印對象的引用。沒有使用__toString()的對象是產生 一個錯誤,當打印對象的時候會自動調用__toString()方法。 class Computer { private function __toString() { return '打印對象'; } } echo new Computer(); PHP可以在類中定義一個__clone()內置方法來調整對象的克隆行為。當一個對象被克 隆的時候自動執行__clone()方法,而復制的對象可以在其方法體內進行調整。 class Computer { public $_name ; public function __clone() { $this->_name = 'ibm'; } } $computer1 = new Computer(); $computer1->_name = 'dell'; $computer2 = clone $computer1; echo $computer2->_name; 二. 類函數和對象函數 PHP提供了一系列強大的函數來檢測類和對象。以便在第三方系統,運行時知道正在 使用的是哪個。 1.class_exists()函數接受表示類的字符串,檢查并返回布爾值。如果類存在,返回true , 否則返回false。 echo class_exists('Computer'); 2.get_class()函數獲取對象的類名,如果不是對象,則返回false。 echo get_class($computer); 3.get_class_methods()函數獲取類中的方法(公共的),以數組的形式返回出來。 print_r(get_class_methods($computer)); 4.get_class_vars()函數獲取類中的字段(公共的),以數組的形式返回出來 print_r(get_class_vars('Computer')); 5.get_parent_class()函數獲取子類的父類,如果沒有返回false。 echo get_parent_class('NoteComputer'); 6.interface_exists()函數確定接口是否存在,如果存在返回true,否則返回false。 echo interface_exists('Computer'); 7.is_a()函數確定對象是否是類或者是否是這類的父類時,返回ture,否則返回false。 echo is_a($computer,'Computer'); 8.is_subclass_of()函數確定對象是否是類的子類,是返回ture,否則返回false。 echo is_subclass_of($notecomputer,'Computer'); 9.method_exists()函數確定對象的方法是否存在,是返回ture,否則返回false。 echo method_exists($computer,'_run'); 三. OOP 的反射 API PHP5的類和對象函數并沒有告訴我們類內部的所有一切,而只是報告了它們的公共成 員。要充分了解一個類,需要知道其私有成員和保護成員,還要知道其方法所期望的參數 。 對此,使用反射API。 1.獲得反射API的轉儲信息 $rc = new ReflectionClass('Computer'); Reflection::export($rc); 2.獲得PHP內置的類庫的信息 Reflection::export(new ReflectionClass('Reflection')); 3.獲取類里的某個元素 $_rc = new ReflectionClass('Computer'); echo $_rc->getFileName(); echo $_rc->getName();
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。