激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 說說PHP的autoLoad自動加載機制

說說PHP的autoLoad自動加載機制

2020-01-12 17:57PHP教程網 PHP教程

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或者單獨一個文件來進行維護了?;蛟S你會想到使用一個框架來維護或者建立這么一個映射。 

spl_autoload 

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

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

因此我們急需使用一個autoload調用堆棧,這樣spl的autoload系列函數就出現了。你可以使用spl_autoload_register注冊多個自定義的autoload函數 

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

先了解spl的幾個函數: 
說說PHP的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 == 'http'){ 
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 == 'http'){ 
require_once("/home/yejianfeng/handcode/http.php"); 

if($class == 'http2'){ 
require_once("/home/yejianfeng/handcode/http2.php"); 

}); 
spl_auto_call('http2'); 
$a = new http(); 
$a->callname(); //這個時候會輸出"this is http2" 


spl_auto_register這個函數使得我們不使用__autoload,使用自定義的函數來進行自動加載成為可能。這個方法現在是經常使用到的。 
Zend的AutoLoader模塊就使用了這個方法。摘錄其中對應的代碼 

復制代碼代碼如下:


spl_autoload_register(array(__CLASS__, 'autoload')); 

public static function autoload($class) 

….. 

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级毛片手机在线观看 | 久久精品探花 | 麻豆视频在线播放 | 国产精品一品二区三区四区18 | 精品国产一区二区亚洲人成毛片 | 国产精品视频免费网站 | 亚洲精品 欧美 | 国产精品九九久久一区hh | 成人午夜在线免费视频 | 最新一级毛片 | av在线免费看片 | 99久久精品免费 | 免费永久看羞羞片网站入口 | 久久精品视频在线免费观看 | 国产青草视频在线观看视频 | 全黄裸片武则天一级第4季 偿还电影免费看 | 福利免费在线观看 | 亚洲天堂岛国片 | 精品亚洲午夜久久久久91 | 亚洲成人播放 | 一级黄色国产视频 | 99riav国产在线观看 | 中文字幕在线免费播放 | 操穴视频| 成人在线观看一区二区 | 黄色免费不卡视频 | av免费在线免费观看 | 91精品国产综合久久男男 | 美国黄色小视频 | 国产精品伦视频看免费三 | 欧美一区中文字幕 | 一级免费黄色免费片 | 欧美aaaaa一级毛片在线 | www.精品一区 | 色综合久久99 | 久久99国产综合精品 | 久久精品高清 | 久久精品com | 爱视频福利| 欧美特黄一级高清免费的香蕉 | 欧美1—12sexvideos|