在使用PHP的OO模式開發系統時,通常大家習慣上將每個類別的實作存放在一個單獨的檔案裡,這樣會很容易實現對類別進行複用,同時將來維護時也很便利。這也是OO設計的基本思想之一
在PHP5之前,如果需要使用一個類,只需要直接使用include/require將其包含進來即可
test.class.php
<?php class abc{ function construct() { echo 'www.hzhuti.com; } } ?>
load.php
程式碼如下
<?php class LOAD { static function loadClass($class_name) { $filename = $class_name.".class.php"; if (is_file($filename)) return include_once $filename; } } /** * 设置对象的自动载入 * spl_autoload_register — Register given function as autoload() implementation */ spl_autoload_register(array('LOAD', 'loadClass')); $a = new Test();//实现 自动加载 ,很多框架就用这种方法 自动加载类 ?>
autoload()
在實際專案中,不可能把所有的類別都寫在一個PHP 檔案中,當在一個PHP 檔案中需要呼叫另一個檔案中宣告的類別時,就需要透過include 把這個檔案引入。不過有的時候,在文件眾多的項目中,要一一將所需類的文件都include 進來,一個很大的煩惱是不得不在每個類文件開頭寫一個長長的包含文件的列表。我們能不能在用到什麼類別的時候,再把這個類別所在的 php 檔案導入呢?
為此,PHP 提供了 autoload() 方法,它會在試圖使用尚未定義的類別時自動呼叫。透過呼叫此函數,腳本引擎在 PHP 出錯失敗前有了最後一個機會載入所需的類別。
autoload() 方法接收的一個參數,就是要載入的類別的類別名,所以這時候需要類別名稱與檔案名稱對應,如 Person.php ,對應的類別名稱就是 Pserson 。
下面看個完整的實例
class ClassA{ public function construct(){ echo “ClassA load success!”; } } //定义一个类ClassA,文件名为ClassA.php class ClassA{ public function construct(){ echo “ClassA load success!”; } } class ClassB extends ClassA { public function construct(){ //parent::construct(); echo “ClassB load success!”; } } //定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA class ClassB extends ClassA { public function construct(){ //parent::construct(); echo “ClassB load success!”; } }
定義兩個測試用的類別之後,我們來寫一個含有autoload()方法的PHP執行程式檔案如下:
function autoload($classname){ $classpath=”./”.$classname.'.php'; if(file_exists($classpath)){ require_once($classpath); } else{ echo ‘class file'.$classpath.'not found!'; } } $newobj = new ClassA(); $newobj = new ClassB();
以上是php如何使用 _autoload自動載入類別實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!