首頁  >  文章  >  後端開發  >  autoLoad自動載入機制簡單使用教學課程

autoLoad自動載入機制簡單使用教學課程

伊谢尔伦
伊谢尔伦原創
2017-07-01 09:37:011659瀏覽

php的autoload大致可以使用兩種方法:autoload和spl方法。這兩種方法又各有不同的幾種使用方法

autoload的使用方法1:
最常使用的就是這種方法,根據類別名,找出類文件,然後require_one

 程式碼如下:

function autoload($class_name) { 
$path = str_replace('_', '/', $class_name); 
require_once $path . '.php'; 
} 
// 这里会自动加载Http/File/Interface.php 文件 
$a = new Http_File_Interface();

這個方法的優點就是簡單易使用。當然也有缺點,缺點就是將類別名稱和檔案路徑強製做了約定,當修改檔案結構的時候,就勢必要修改類別名稱。

autoload的使用方法2(直接映射法)

#程式碼如下:

$map = array( 
'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' 
); 
function autoload($class_name) { 
if (isset($map[$class_name])) { 
require_once $map[$class_name]; 
} 
} 
// 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 
$a = new Http_File_Interface();


這種方法的好處就是類別名稱和檔案路徑只是用一個映射來維護,所以當檔案結構改變的時候,不需要修改類別名,只需要將映射中對應的項修改就好了。

這種方法相較於前面的方法缺點是當檔案多了的時候這個映射維護起來非常麻煩,或許這時候你就會考慮使用json或單獨一個檔案來進行維護了。或許你會想到使用一個框架來維護或建立這麼一個映射。

spl_autoload

autoload的最大缺陷是無法有多個autoload方法

好了, 想下下面的這個情景,你的專案引用了別人的一個項目,你的項目中有一個autoload,別人的項目也有一個autoload,這樣兩個autoload就衝突了。解決的方法就是修改autoload成為一個,這無疑是非常繁瑣的。

因此我們急需使用一個autoload呼叫堆疊,這樣spl的autoload系列函數就出現了。你可以使用spl_autoload_register註冊多個自訂的autoload函數

如果你的PHP版本大於5.1的話,你就可以使用spl_autoload

先了解spl的幾個函數:
autoLoad自動載入機制簡單使用教學課程

spl_autoload 是_autoload()的預設實現,它會去include_path中尋找$class_name(.php/.inc)
Spl_autoload 自動載入:

程式碼如下:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
set_include_path("/home/yejianfeng/handcode/"); //这里需要将路径放入include 
spl_autoload("http"); //寻找/home/yejianfeng/handcode/http.php 
$a = new http(); 
$a->callname();

Spl_autoload_register

將函數註冊到SPL autoload函數堆疊中,直接看一個例子:

#程式碼如下:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
}); 

$a = new http(); 
$a->callname();

spl_autoload_call

呼叫spl_autoload_register中註冊的呼叫函數, 看下面的例子

程式碼如下:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*http2.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http2"; 
} 
} 
/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
if($class == &#39;http2&#39;){ 
require_once("/home/yejianfeng/handcode/http2.php"); 
} 
}); 
spl_auto_call(&#39;http2&#39;); 
$a = new http(); 
$a->callname(); //这个时候会输出"this is http2"

spl_auto_register這個函數使得我們不使用autoload,使用自訂的函數來進行自動載入成為可能。這個方法現在是常用來的。
Zend的AutoLoader模組就使用了這個方法。摘錄其中對應的程式碼

程式碼如下:

spl_autoload_register(array(CLASS, &#39;autoload&#39;)); 

public static function autoload($class) 
{ 
….. 

}


#

以上是autoLoad自動載入機制簡單使用教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn