詳解PHP檔案的自動載入(autoloading)

2022-10-06 07:51:08 字數 1929 閱讀 6287

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

<?php require_'../includes/functions.php');

require_once('../includes/database.php');

require_once('../includes/user.php');

...但是一旦要呼叫的文件多了,就得每次都寫一vlbbt行,瞅著也不美觀,有什麼辦法能讓php文件自動載入呢?

<?php function __autoload($class_name)

.php";

}對,可以使用php的魔法函式__autoload(),上面的示例就是自動載入當前目錄下的php檔案。當然,實際當中,我們更可能會這麼來使用:

<?php function __autoload($class_name)

.php";

if(file_exists($path))else 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));

//使用乙個全域性函式

function custom()

spl_autoload_register('custom');

//使用乙個class當中的static方法

class mycustomautoloader

}//傳array進來,第乙個是class名,第二個是方法名

spl_autoload_register(['mycustomautoloader','myloader']);

//甚至也可以用在例項化的object上

class mycustomautoloader

}$object = new mycustomautoloader;

spl_autoload_register([$object,'myloader']);

值得一提的是,使用autoload,無論是__autoload(),還是spl_autoload_register(),相比於require或inclu程式設計客棧de,好處就是autoload機制是lazy loading,也即是並不是你一執行就給你呼叫所有的那些檔案,而是只有你用到了哪個,比如說new了哪個檔案以後,才會通過autoload機制去載入相應檔案。

當然,lar**el包括各個package裡也是經常用到spl_autoload_register,比如這裡:

/*** prepend the load method to the auto-loader stack.

* * @return void

*/protected function prependtoloaderstack()

本文標題: 詳解php檔案的自動載入(autoloading)

本文位址: /wangluo/php/219663.html

php載入其他php檔案,PHP自動載入類的實現

本文介紹了php中的自動載入操作實現方法,結合例項形式詳細分析了php自動載入的概念 原理 實現方法及相關操作注意事項。我們日常例項化乙個類,必須使用require 載入這個類檔案 如果載入的檔案過多,大量使用require來載入檔案,過於繁瑣與麻煩。所以在php5.1.2版本後,php加入自動實現...

PHP自動載入class檔案的方案

php5中有乙個很方便的 autoload的魔術函式,php manual中的示例如下 算是很方便的乙個函式,然而有乙個缺陷就是沒有命名空間,大量的class不得不放在乙個目錄下面,才可以用這個自動載入php的魔術函式,如果class檔案要放在不同的目錄裡面,這個自動載入就無能為力了。為了解決這個問...

PHP手冊 自動載入檔案

很多開發者寫物件導向的應用程式時對每個類的定義建立乙個 php 原始檔。乙個很大的煩惱是不得不在每個指令碼 每個類乙個檔案 開頭寫乙個長長的包含檔案列表。在 php 5 中,不再需要這樣了。可以定義乙個 autoload 函式,它會在試圖使用尚未被定義的類時自動呼叫。通過呼叫此函式,指令碼引擎在 p...