国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php _autoload自動加載類與機制分析

2024-09-04 11:44:10
字體:
來源:轉載
供稿:網友

在使用PHP的OO模式開發系統時,通常大家習慣上將每個類的實現都存放在一個單獨的文件里,這樣會很容易實現對類進行復用,同時將來維護時也很便利,這也是OO設計的基本思想之一,在PHP5之前,如果需要使用一個類,只需要直接使用include/require將其包含進來即可.

test.class.php,代碼如下:

  1. <?php  
  2. class abc{  
  3. function __construct()  
  4. {  
  5. echo 'm.survivalescaperooms.com;  
  6. }  
  7. }  
  8. ?> 

load.php,代碼如下:

  1. <?php  
  2. class LOAD  
  3. {  
  4. static function loadClass($class_name)  
  5. {  
  6. $filename = $class_name.".class.php";  
  7. if (is_file($filename)) return include_once $filename;  
  8. }  
  9. }  
  10. /**  
  11. * 設置對象的自動載入  
  12. * spl_autoload_register — Register given function as __autoload() implementation  
  13. */  
  14. spl_autoload_register(array('LOAD''loadClass'));  
  15. $a = new Test();//實現自動加載,很多框架就用這種方法自動加載類  
  16. ?>   

__autoload()

在實際項目中,不可能把所有的類都寫在一個 PHP 文件中,當在一個 PHP 文件中需要調用另一個文件中聲明的類時,就需要通過 include 把這個文件引入,不過有的時候,在文件眾多的項目中,要一一將所需類的文件都 include 進來,一個很大的煩惱是不得不在每個類文件開頭寫一個長長的包含文件的列表,我們能不能在用到什么類的時候,再把這個類所在的 php 文件導入呢?

為此,PHP 提供了 __autoload() 方法,它會在試圖使用尚未被定義的類時自動調用,通過調用此函數,腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類.

__autoload() 方法接收的一個參數,就是欲加載的類的類名,所以這時候需要類名與文件名對應,如 Person.php,對應的類名就是 Pserson.

下面看個完整的實例,代碼如下:

  1. class ClassA{  
  2. public function __construct(){  
  3. echo “ClassA load success!”;  
  4. }  
  5. }  
  6. //定義一個類ClassA,文件名為ClassA.php  
  7. class ClassA{  
  8. public function __construct(){  
  9. echo “ClassA load success!”;  
  10. }  
  11. }  
  12. class ClassB extends ClassA {  
  13. public function __construct(){  
  14. //parent::__construct();  
  15. echo “ClassB load success!”;  
  16. //開源代碼Vevb.com 
  17. }  
  18. //定義一個類ClassB,文件名為ClassB.php,ClassB繼承ClassA  
  19. class ClassB extends ClassA {  
  20. public function __construct(){  
  21. //parent::__construct();  
  22. echo “ClassB load success!”;  
  23. }  

定義兩個測試用的類之后,我們來編寫一個含有__autoload()方法的PHP運行程序文件如下,代碼如下:

  1. function __autoload($classname){  
  2. $classpath=”./”.$classname.'.php';  
  3. if(file_exists($classpath)){  
  4. require_once($classpath);  
  5. }  
  6. else{  
  7. echo ‘class file'.$classpath.'not found!';  
  8. }  
  9.  
  10. $newobj = new ClassA();  
  11. $newobj = new ClassB(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海林市| 安化县| 吴川市| 闵行区| 新郑市| 黄陵县| 玛多县| 太和县| 鹿邑县| 双鸭山市| 汉源县| 金昌市| 南郑县| 河南省| 邮箱| 东海县| 惠水县| 陆丰市| 华阴市| 六盘水市| 济宁市| 怀来县| 万载县| 综艺| 云和县| 平乐县| 博乐市| 阿鲁科尔沁旗| 绥中县| 西华县| 彰武县| 梅河口市| 平潭县| 大姚县| 澄迈县| 溧阳市| 防城港市| 同江市| 镶黄旗| 普陀区| 徐水县|