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

首頁 > 開發 > PHP > 正文

php中autoload的用法總結

2024-05-04 23:19:24
字體:
來源:轉載
供稿:網友

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推薦了一種最流行的辦法,在文件名中包含路徑。例如下面的例子:

// Main.class

function __autoload($class_name) {
    $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);
    require_once $path.'.php';
}

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

這種方法的缺點是在編碼過程中,我們必須明確的知道代碼文件應當所處的位置,而且由于

將文件路徑硬編碼在了類名中,如果需要修改文件夾的結構時,我們必須手工修改所有的類名。

'Include All'方法

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

例如:

復制代碼 代碼如下:


<?php
  $arr = array (
    'Project/Classes',
    'Project/Classes/Children',
    'Project/Interfaces'
  );

  foreach($arr as $dir) {
    $dir_list = opendir($dir);

    while ($file = readdir($dir_list)) {
      $path = $dir.DIRECTORY_SEPARATOR.$file;
      if(in_array($file, array('.', '..')) || is_dir($path))
        continue;

      if (strpos($file, ".class.php"))
        require_once $path;
    }
  }
?>


關聯文件和位置

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

復制代碼 代碼如下:


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


調用的文件

復制代碼 代碼如下:


<?php
  require 'autoload_generated.php';

  function __autoload($className) {
    global $autoload_list;
    require_once $autoload_list[$className];
  }

  $x = new A();
?>


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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲第一| 91亚洲精品在线| 日韩av免费在线| 久久久久国产精品免费网站| 日日狠狠久久偷偷四色综合免费| 97视频在线观看播放| 国产午夜精品免费一区二区三区| 2019日本中文字幕| 欧美成人午夜激情| 午夜精品久久久久久99热软件| 国产一区二区日韩精品欧美精品| 国产一区二区三区视频| 亚洲直播在线一区| 亚洲人成伊人成综合网久久久| 欧美做受高潮电影o| 久久国产精品久久精品| 日韩精品中文字幕在线播放| 在线播放亚洲激情| 这里只有视频精品| 亚洲色图15p| 欧美天天综合色影久久精品| 国产精品一区二区三区毛片淫片| 亚洲成人精品久久久| 欧美第一黄色网| 精品亚洲一区二区| 欧美久久精品一级黑人c片| 久久久久久久久久av| 亚洲成人av在线播放| 久久99久国产精品黄毛片入口| 北条麻妃99精品青青久久| 久久亚洲国产成人| 日韩女在线观看| 色偷偷av亚洲男人的天堂| 久久天天躁日日躁| 91国自产精品中文字幕亚洲| 国产欧美在线播放| 成人欧美一区二区三区在线湿哒哒| 久久久成人精品| 欧美一级片一区| 国产午夜精品一区二区三区| 国产精品福利观看| 欧美专区中文字幕| 日韩中文字幕在线视频| 日本免费久久高清视频| 91精品国产高清自在线看超| 中文字幕精品一区二区精品| 中文字幕欧美日韩| 欧美日韩xxxxx| 国产一区二区三区久久精品| 国产网站欧美日韩免费精品在线观看| 中文字幕欧美精品在线| 国产网站欧美日韩免费精品在线观看| 亚洲午夜女主播在线直播| 欧美日韩一区二区免费在线观看| 国产一区二区三区四区福利| 亚洲日韩中文字幕在线播放| 欧美日韩福利视频| 亚洲国产高清高潮精品美女| 日韩电影中文字幕在线| 欧美成人免费全部| 欧美性极品xxxx娇小| 国产日韩精品综合网站| 亚洲男人av电影| 九九热这里只有在线精品视| 日韩国产高清污视频在线观看| 国产亚洲综合久久| 国产成人午夜视频网址| 97精品伊人久久久大香线蕉| 久久久久999| 91av在线播放视频| 亚洲欧美另类人妖| 国产精品2018| 日韩一区二区福利| 日韩在线观看电影| 成人国产精品久久久| 欧美区二区三区| 性欧美在线看片a免费观看| 77777少妇光屁股久久一区| 久久午夜a级毛片| 欧美大片在线影院| 欧美精品久久久久久久久久| 亚洲天堂av图片| 国产精品福利久久久| 亚洲网站视频福利| 亚洲成人久久久| 一色桃子一区二区| 91亚洲精品一区二区| 欧美裸体男粗大视频在线观看| 亚洲一区二区三区乱码aⅴ| 亚洲经典中文字幕| 亚洲人成在线电影| 国产中文欧美精品| 日韩中文字幕国产精品| 国产成人一区二区在线| 久久精品影视伊人网| 欧美午夜片在线免费观看| 97精品一区二区视频在线观看| 色妞色视频一区二区三区四区| 亚洲国产天堂网精品网站| 欧美日韩精品二区| 久久久久久久久久久亚洲| 成人国产在线视频| 色777狠狠综合秋免鲁丝| 91国偷自产一区二区三区的观看方式| 国产成一区二区| 国产综合在线观看视频| 亚洲品质视频自拍网| 亚洲国产精品免费| 成人午夜在线视频一区| 亚洲人成在线免费观看| 一色桃子一区二区| 一区二区三区四区在线观看视频| 日韩精品黄色网| 欧美激情视频免费观看| 青青精品视频播放| 成人福利免费观看| 97超级碰碰碰久久久| 久久夜精品va视频免费观看| 欧美性猛交xxxx免费看漫画| 中文字幕日韩欧美在线视频| 色青青草原桃花久久综合| 欧美制服第一页| 亚洲福利在线观看| 亚洲一区二区三区成人在线视频精品| 国产91色在线|| 亚洲黄色www网站| 久久激情视频免费观看| 国产精品美女999| 久久精视频免费在线久久完整在线看| 韩国19禁主播vip福利视频| 久久天天躁狠狠躁夜夜躁| 亚洲天堂av在线播放| 激情成人在线视频| 亚洲字幕在线观看| 亚洲自拍偷拍第一页| 亚洲男人天堂久| 日韩电影免费观看在线观看| 国产精品入口夜色视频大尺度| 日韩美女视频免费看| 91久久精品日日躁夜夜躁国产| 亚洲视频综合网| 精品美女永久免费视频| 国产亚洲欧美一区| 欧美激情国产日韩精品一区18| 国产欧美日韩中文字幕在线| 日韩欧美在线免费观看| 日韩综合中文字幕| 久久影院模特热| 精品成人乱色一区二区| 成人www视频在线观看| 欧美成人精品一区二区三区| 不卡在线观看电视剧完整版| 日韩福利伦理影院免费| 日韩精品日韩在线观看| 精品少妇v888av| 国产97色在线|日韩| 亚洲精品美女久久久久| 理论片在线不卡免费观看| 91精品视频在线播放| 日韩av电影免费观看高清| 久久综合久久美利坚合众国| 国产97在线视频| 亚洲精品有码在线| 色婷婷久久一区二区|