亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php中autoload的用法總結

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

在PHP中使用類時,我們必須在使用前加載進來,不管是通過 require 的方式還是 include 的方式,但是會有兩個問題影響我們做出加載的決定。

PHP中提供了Autoload來幫助我們方便的進行文件的包含,但是autoload并非想象的那樣能夠處理所有的情況,今天就來記錄一下前幾天遇到的autoload存在的一些問題。

為什么要使用 Autoload

在PHP中使用類時,我們必須在使用前加載進來,不管是通過 require 的方式還是 include 的方式,但是會有兩個問題影響我們做出加載的決定。

首先是不知道這個類文件存放在什么地方,另外一個就是不知道什么時候需要用到這個文件。特別是項目文件特別多時,不可能每個文件都在開始的部分寫很長一串的 require ….

在PHP5之后,我們可以通過 __autoload來解決這個問題。 而且在PHP5.1之后,還提供了 spl_autoload_register() 來提供更完善的加載機制。

通過閱讀了 Autoloading in PHP 這篇文章,我理解的 Autoload 的加載機制,當通過 new 來實例化一個類時,PHP會通過定義的__autoload 函數加載相應的文件,如果這個類文件使用了 extends 或者 implements 需要用到其他的類文件,php會重新運行 autoload 去進行類文件的查找和加載,如果發生了兩次對同一類文件的請求,就會報錯。原文作者提供了三個很有趣的例子來說明這個問題,可以通過 這里 下載源碼查看。

一般情況下,有很多種方法來解決加載時到相應位置查找文件的方法。用的最多的就是指定特定的命名標準。

Zend的方法

zend推薦了一種最流行的辦法,在文件名中包含路徑。例如下面的例子:

  1. // Main.class  
  2.  
  3. function __autoload($class_name) {  
  4.     $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);  
  5.     require_once $path.'.php';  

$temp = new Main_Super_Class(); 所有的下劃線都會被替換成路徑中的分隔符,上例中就會去 Main/Super/Class.php文件。

這種方法的缺點是在編碼過程中,我們必須明確的知道代碼文件應當所處的位置,而且由于將文件路徑硬編碼在了類名中,如果需要修改文件夾的結構時,我們必須手工修改所有的類名。

'Include All'方法

如果是在一個開發環境中,并且對于速度不是很在意的話,使用這個方法是非常方便的。通過將所有類文件放在一個或幾個特定文件夾中,然后通過遍歷的方式查找加載。

例如:

  1. <?php  
  2.   $arr = array (  
  3.     'Project/Classes',  
  4.     'Project/Classes/Children',  
  5.     'Project/Interfaces'  
  6.   );  
  7.  
  8.   foreach($arr as $dir) {  
  9.     $dir_list = opendir($dir);  
  10.  
  11.     while ($file = readdir($dir_list)) {  
  12.       $path = $dir.DIRECTORY_SEPARATOR.$file;  
  13.       if(in_array($filearray('.''..')) || is_dir($path))  
  14.         continue;  
  15.  
  16.       if (strpos($file".class.php"))  
  17.         require_once $path;  
  18.     }  
  19.   }  
  20. ?> 

關聯文件和位置

另外一個方法是在類文件和他的位置之間建立關聯的配置文件,例如:

  1. // configuration.php  
  2. array_of_associations = array(  
  3.   'MainSuperClass' = 'C:/Main/Super/Class.php',  
  4.   'MainPoorClass' = 'C:/blablabla/gy.php'  
  5. ); 

調用的文件

  1. <?php  
  2.   require 'autoload_generated.php';  
  3.  
  4.   function __autoload($className) {  
  5.     global $autoload_list;  
  6.     require_once $autoload_list[$className];  
  7.   }  
  8.  
  9.   $x = new A();  
  10. ?> 

當然,如果文件特別多的時候,維護起來會是一件麻煩事,但是與在類名中硬編碼位置,哪個更好呢?

我們當然不希望手工來維護這個列表,那么可以使用自動生成這個文件來實現,這個對應關系的文件可以是php/xml/json等等。原文的作者實現了一個這樣的工具,仔細考慮一下的話,這個不是很難實現,原文作者甚至發展了一個小型的 Autoload 框架,值得學習。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人精品av| 亚洲免费成人av电影| 欧美日韩色婷婷| 亚洲成人精品久久久| 亚洲在线观看视频| 日韩经典第一页| 91精品国产综合久久香蕉最新版| 日韩一级裸体免费视频| 中文字幕国产日韩| 亚洲自拍偷拍一区| 国产成人在线视频| 亚洲国产精品美女| 日韩男女性生活视频| 欧美极品美女视频网站在线观看免费| 26uuu另类亚洲欧美日本老年| 日韩精品极品视频免费观看| 久久影视免费观看| 国产精品美女www爽爽爽视频| 国产精品久久久久久久久久免费| 欧美裸体xxxx极品少妇软件| 亚洲自拍小视频免费观看| 美日韩精品免费观看视频| 国产精品久久久久久亚洲调教| 国内偷自视频区视频综合| 中文字幕精品在线视频| 精品国偷自产在线视频| 亚洲性日韩精品一区二区| 欧美精品国产精品日韩精品| 91精品国产91久久久| 欧美—级高清免费播放| 97在线观看免费| 欧美自拍大量在线观看| 久久久免费在线观看| 欧美另类第一页| 国产一区二区精品丝袜| 欧美激情啊啊啊| 亚洲免费av片| 成人欧美一区二区三区在线湿哒哒| 亚洲区免费影片| 久久久久久久久久久av| 国产精品劲爆视频| 91久久精品国产| 国产精品亚洲美女av网站| 色偷偷偷综合中文字幕;dd| 福利视频一区二区| 日韩欧美精品免费在线| 中文字幕精品在线视频| 亚洲free嫩bbb| 成人av.网址在线网站| 久久久久久久999精品视频| 久久这里有精品| 午夜精品一区二区三区av| 日韩精品www| 成人激情视频在线播放| 日韩电影免费观看在线| 亚洲精品电影久久久| 亚洲欧美成人一区二区在线电影| 国产精品av在线播放| 欧美小视频在线观看| 668精品在线视频| 日韩欧美在线看| 国产精品成人一区二区三区吃奶| 精品日本高清在线播放| 亚洲精品影视在线观看| 国产精品午夜国产小视频| 亚洲欧美日本伦理| 欧美日韩一区二区在线| 高清亚洲成在人网站天堂| 亚洲午夜未删减在线观看| 亚洲日本aⅴ片在线观看香蕉| 国产精品激情自拍| 日韩电影大片中文字幕| 操91在线视频| 搡老女人一区二区三区视频tv| 久久免费少妇高潮久久精品99| 国产精品高潮呻吟久久av野狼| 一区二区三区国产视频| 色婷婷亚洲mv天堂mv在影片| 丰满岳妇乱一区二区三区| 久久综合88中文色鬼| 成人xvideos免费视频| 亚洲美女www午夜| 色悠悠久久88| 国产欧美日韩精品丝袜高跟鞋| 国语自产在线不卡| 米奇精品一区二区三区在线观看| 欧美性xxxxhd| xxxx性欧美| 日韩在线不卡视频| 亚洲二区在线播放视频| 久久精品亚洲94久久精品| 91在线视频一区| 4438全国成人免费| 美女国内精品自产拍在线播放| 中文字幕亚洲欧美日韩高清| 亚洲一区中文字幕| 成人激情视频在线观看| 日韩欧美黄色动漫| 欧美最猛性xxxx| 国产一级揄自揄精品视频| 亚洲欧洲av一区二区| 高清欧美一区二区三区| 日本成人黄色片| 欧美国产高跟鞋裸体秀xxxhd| 欧美精品在线免费观看| 国产免费久久av| 欧美日韩成人黄色| 日韩一级黄色av| 91国语精品自产拍在线观看性色| 亚洲乱码一区二区| 日韩欧美福利视频| 欧美重口另类videos人妖| 欧美性猛交xxxx免费看漫画| 国产高清视频一区三区| 亚洲韩国欧洲国产日产av| 日韩精品小视频| 青青在线视频一区二区三区| 韩剧1988在线观看免费完整版| 国产精品在线看| 午夜精品久久17c| 日韩在线欧美在线| 亚洲精品成人av| 国产69精品99久久久久久宅男| 隔壁老王国产在线精品| 欧美日本高清视频| 国产欧美日韩中文字幕| 欧美日韩午夜激情| 国产不卡视频在线| 亚洲精品美女视频| 精品中文字幕在线2019| 黑人巨大精品欧美一区二区| 国内免费久久久久久久久久久| 91香蕉国产在线观看| 欧美国产日韩一区二区三区| 国产精品久久久久77777| 亚洲xxxx在线| 亚洲日本成人女熟在线观看| 伊人亚洲福利一区二区三区| 57pao国产精品一区| 91成人福利在线| 欧美大尺度在线观看| 欧美重口另类videos人妖| 日韩成人黄色av| 91av国产在线| 久久精品国产69国产精品亚洲| 欧美成人黑人xx视频免费观看| 在线播放亚洲激情| 菠萝蜜影院一区二区免费| 国产精品久久国产精品99gif| 久久色精品视频| 欧美又大又粗又长| 欧美一级片免费在线| 欧美裸体xxxx极品少妇软件| 日韩av成人在线观看| 色综合亚洲精品激情狠狠| 国产主播精品在线| 久久久免费精品视频| 性色av一区二区三区| 久久夜精品香蕉| 国产精品日日摸夜夜添夜夜av| 久久久免费观看| 国产精品第一页在线| 一本色道久久综合狠狠躁篇的优点| 亚洲欧美成人在线|