php載入檔案方式:
1、include,include_once,requice,requice_one常規載入
2、__autoload()
3、spl_autoload_register()
假設我們有乙個類檔案a.php,裡面定義了乙個名字為a的類:
<?php
class a
}
然後我們有乙個index.php需要用到這個類a,常規的寫法就是
<?php
require('a.php');
$a = new a();
但是有乙個問題就是,假如我們的index.php需要包含的不只是類a,而是需要很多類,這樣子就必須寫很多行require語句,有時候也會讓人覺得不爽。
不過在php5之後的版本,我們就不再需要這樣做了。
在php5中,試圖使用尚未定義的類時會自動呼叫__autoload函式,所以我們可以通過編寫__autoload函式來讓php自動載入類,而不必寫乙個長長的包含檔案列表。
例如在上面那個例子中,index.php可以這樣寫:
<?php
function __autoload($class)
}
$a = new a();
當然上面只是最簡單的示範,__autoload只是去include_path尋找類檔案並載入,我們可以根據自己的需要定義__autoload載入類的規則。注意:由於__autoload()是個函式,只能存在一次。
但現在問題來了,如果在乙個系統的實現中,如果需要使用很多其它的類庫,這些類庫可能是由不同的開發人員編寫的,其類名與實際的磁碟檔案的對映規則不盡相同。這時如果要實現類庫檔案的自動載入,就必須在__autoload()函式中將所有的對映規則全部實現,這樣的話__autoload()函式有可能 會非常複雜,甚至無法實現。最後可能會導致__autoload()函式十分臃腫,這時即便能夠實現,也會給將來的維護和系統效率帶來很大的負面影響。在這種情況下,難道就沒有更簡單清晰的解決辦法了吧?答案當然是:no!
spl_autoload_register() 滿足了此類需求。 它實際上建立了 autoload 函式的佇列,按定義時的順序逐個執行。相比之下, __autoload() 只可以定義一次。
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
我們繼續改寫上面那個例子:
<?php
function loader($class)
}
spl_autoload_register('loader');
$a = new a();
或者直接使用匿名函式:
<?php
spl_autoload_register(function($file)
});
$a = new a();
這樣子也是可以正常執行的,這時候php在尋找類的時候就沒有呼叫__autoload而是呼叫我們自己定義的函式loader了。同樣的道理,下面這種寫法也是可以的:
<?php
class loader
}
}
spl_autoload_register(array('loader', 'loadclass'));
//spl_autoload_register(array(__class__, 'loadclass'));
//spl_autoload_register(array($this, 'loadclass'));
$a = new a();
autoload.php
<?php
define('sdk_path', __dir__);
require_once sdk_path . '/common/functions.php';
require_once sdk_path . '/common/config.php';
spl_autoload_register(function ($class)
});/*
function __autoload($class)
}*/
建議入口檔案裡養成定義絕對位址sdk_path的習慣,這樣require不會出錯。
參考:php autoload與spl_autoload自動載入機制的深入理解_php例項_指令碼之家
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 ...