久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

詳解PHP文件的自動加載(autoloading)

這篇文章主要介紹了詳解PHP文件的自動加載(autoloading)相關知識點以及詳細用法,有這方面需要的朋友參考下吧。

傳統上,在PHP里,當我們要用到一個class文件的時候,我們都得在文檔頭部require或者include一下:

<?php
require_once('../includes/functions.php');
require_once('../includes/database.php');
require_once('../includes/user.php');
...

但是一旦要調用的文檔多了,就得每次都寫一行,瞅著也不美觀,有什么辦法能讓PHP文檔自動加載呢?

<?php
function __autoload($class_name)
{
  require "./{$class_name}.php";
}

對,可以使用PHP的魔法函數__autoload(),上面的示例就是自動加載當前目錄下的PHP文件。當然,實際當中,我們更可能會這么來使用:

<?php
function __autoload($class_name)
{
  $name = strtolower($class_name);
  $path = "../includes/{$name}.php";
  
  if(file_exists($path)){
     require_once($path);
    }else{
      die("the file {$class_name} could not be found");
    }
}

也即是做了一定的文件名大小寫處理,然后在require之前檢查文件是否存在,不存在的話顯示自定義的信息。

類似用法經常在私人項目,或者說是單一項目的框架中見到,為什么呢?因為你只能定義一個__autoload function,在多人開發中,做不到不同的developer使用不同的自定義的autoloader,除非大家都提前說好了,都使用一個__autoload,涉及到改動了就進行版本同步,這很麻煩。

也主要是因為此,有個好消息,就是這個__autoload函數馬上要在7.2版本的PHP中棄用了。

Warning This feature has been DEPRECATED as of PHP 7.2.0. Relying on this feature is highly discouraged.
那么取而代之的是一個叫spl_autoload_register()的東東,它的好處是可以自定義多個autoloader.

//使用匿名函數來autoload
spl_autoload_register(function($class_name){
  require_once('...');
});
//使用一個全局函數
function Custom()
{
  require_once('...');
}

spl_autoload_register('Custom');
//使用一個class當中的static方法
class MyCustomAutoloader
{
  static public function myLoader($class_name)
  {
    require_once('...');    
  }
}

//傳array進來,第一個是class名,第二個是方法名
spl_autoload_register(['MyCustomAutoloader','myLoader']);  
//甚至也可以用在實例化的object上
class MyCustomAutoloader
{
  public function myLoader($class_name)
  {
  }
}

$object = new MyCustomAutoloader;
spl_autoload_register([$object,'myLoader']); 

值得一提的是,使用autoload,無論是__autoload(),還是spl_autoload_register(),相比于require或include,好處就是autoload機制是lazy loading,也即是并不是你一運行就給你調用所有的那些文件,而是只有你用到了哪個,比如說new了哪個文件以后,才會通過autoload機制去加載相應文件。

當然,laravel包括各個package里也是經常用到spl_autoload_register,比如這里:

/**
 * Prepend the load method to the auto-loader stack.
 *
 * @return void
 */
protected function prependToLoaderStack()
{
  spl_autoload_register([$this, 'load'], true, true);
}

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結合實例形式分析了php實現針對有序表插值查找的相關操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現服務端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現的多維數組排序算法,結合實例形式對比分析了php針對多維數組及帶有鍵名的多維數組進行排序相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結合ajaxuploadfile實現無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: av一区二区三区四区 | 欧美国产日韩精品 | 亚洲xx在线 | 天天夜夜操| 亚洲高清在线观看 | 国产成人自拍一区 | 日韩区 | 成人免费在线播放 | 91极品尤物在线播放国产 | 91精品在线播放 | 成人黄色电影在线播放 | 欧美在线视频网 | 久久69精品久久久久久久电影好 | 日韩欧美中文字幕在线视频 | 国产综合久久 | 蜜桃视频在线观看免费视频网站www | 免费h在线 | 日韩一区和二区 | 亚洲一区二区三区免费在线观看 | 国产成人久久精品 | 91在线观看免费视频 | 亚洲日韩中文字幕 | 国产精品久久久久久久免费大片 | 久久99国产精品久久99果冻传媒 | 国产精品久久久久久妇女 | 91在线看 | 久久88 | 国产一二三区电影 | 日韩精品一区二区三区中文字幕 | 中文字幕在线观看第一页 | 视频在线观看一区二区 | 欧美精品一区二区三区蜜桃视频 | 人人鲁人人莫人人爱精品 | 天天操天天天干 | www.亚洲国产精品 | 日本91av视频 | 午夜免费福利电影 | 免费在线一区二区 | 国产日韩一区二区 | 请别相信他免费喜剧电影在线观看 | 日韩第一夜 |