国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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或者單獨一個文件來進行維護了。或許你會想到使用一個框架來維護或者建立這么一個映射。 

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) 

….. 

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美国产精品一区二区三区 | 久草免费在线视频 | 国产美女精品视频 | 久久精品国产久精国产 | 日韩免费 | 亚洲成人伦理 | 在线观看日韩 | 午夜伦理影院 | 日韩精品无码一区二区三区 | 3d动漫精品一区二区三区 | 日本中文字幕在线播放 | 国产黄大片 | 欧美日韩中文 | 好吊在线观看 | 欧美一区 | 三区在线视频 | 午夜男人的天堂 | 亚洲一区中文字幕 | 欧美一区二区三区不卡 | 曰韩在线| 毛片一区 | 欧美人成在线 | 中文久久| 一级片网址 | 国产日韩精品入口 | 欧美一区二区日韩一区二区 | 久久亚洲视频 | 精品久久久久久久人人人人传媒 | 午夜看片 | |级毛片 | 激情综合五月天 | 性做久久久 | 久久视频在线看 | 亚洲毛片一区二区 | 自拍av在线 | 在线91| 国产91亚洲精品 | 午夜精品久久久久久久 | 久草在线免费资源 | 成人在线一区二区三区 | 999这里只有是极品 最新中文字幕在线 |