平時總使用composer,反而對自動載入的知識有些陌生啦,重新梳理下php中自動載入的知識
首先php中定義乙個類當使用的時候需要將包含改類的檔案引用進來才可以使用,例如
這種情況下如果類檔案少的話還可以,但是如果類檔案多的話,乙個個去 require 豈不是要煩死
php中給出了兩種解決方法:
__autoload($classname)【不推薦】
在php的低版本中支援使用 __autoload 函式來自動獲取 new 關鍵後面的類名,然後根據類名再去載入相應的類檔案,**如下
執行結果
需要載入student類的類檔案官方文件:例項化student類
需要載入teacher類的類檔案
例項化teacher類
其實它與 __autoload 使用上的區別就是,這個函式可以註冊多個自動載入函式。我們上面的例子可以改成這種
目錄如下
sql_autoload_register() 除了支援自定義函式外還可以使用 類名:靜態方法 的方式
隨著專案的越來越複雜,我們會把不同的類放到不同的目錄中,這時候就需要定義相應的載入函式載入到 spl_autoload_register() 中 專案結構及**如下
<?php這時候會發現很不方便,這個時候我們就需要引入命名空間define("dir",dirname(__file__
));function autoload($classname)}
function autoload1($classname)}
spl_autoload_register("autoload");
spl_autoload_register("autoload1");
newstudent();
new teacher();
為每個類引入命名空間,然後在例項化乙個物件的時候 註冊函式中的 $classname 會帶上函式的命名空間路徑,這樣就避免了寫多個註冊函式的問題,示例如下:
目錄結構沒有變
執行結果
需要載入controller\student類的類檔案/home/www/pdemo/demo/controller/student.php
例項化student類
需要載入model\teacher類的類檔案
/home/www/pdemo/demo/model/teacher.php
例項化teacher類
php 載入 php自動載入方式
本篇文章介紹的內容是關於php自動載入方式,現在分享給大家,有需要的朋友可以參考一下這篇文章的內容 php載入檔案方式 1 include,include once,requice,requice one常規載入 2 autoload 3 spl autoload register 常規載入方式 假...
php自動載入
很多開發者寫物件導向的應用程式時對每個類的定義建立乙個 php 原始檔。乙個很大的煩惱是不得不在每個指令碼 每個類乙個檔案 開頭寫乙個長長的包含檔案列表。在 php 5 中,不再需要這樣了。可以定義乙個 autoload 函式,它會在試圖使用尚未被定義的類時自動呼叫。通過呼叫此函式,指令碼引擎在 p...
php自動載入
php自動載方法有兩種.第一種方案用 autoload,這個函式較簡單,也較弱.但有一問題沒有解決,就是在include前判斷檔案是否存在的問題.1 2 3 4 5 6 7 8 9 10 11 12 13 set include path aa path separator get include ...