欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP函數(shù)spl_autoload_register()用法和__autoload()介紹

 更新時(shí)間:2012年02月04日 16:15:18   投稿:mdxy-dxy  
又是框架沖突導(dǎo)致__autoload()失效,用spl_autoload_register()重構(gòu)一下,問(wèn)題解決

__autoload()的用法就不再說(shuō)了,以前已經(jīng)在我的WEB開(kāi)發(fā)筆記中說(shuō)過(guò)。PHP __autoload函數(shù)(自動(dòng)載入類(lèi)文件)的使用方法, 原文地址:http://www.dbjr.com.cn/article/29625.htm

說(shuō)一說(shuō),spl_autoload_register()的用法吧,很簡(jiǎn)單,可以這樣理解,就是聲明一個(gè)自定義__autoload(),你可以是A函數(shù),也可以是B函數(shù),想怎么樣就怎么樣,函數(shù)體的寫(xiě)法,當(dāng)然要和__autoload()一樣就OK 了。

當(dāng)PHP找不到類(lèi)文件會(huì)調(diào)用這個(gè)方法,當(dāng)注冊(cè)了自己的函數(shù)或方法時(shí),PHP不會(huì)調(diào)用__autoload()函數(shù),而會(huì)調(diào)用自定義的函數(shù)

spl_autoload_register(‘func_name');
spl_autoload_register(array(‘class_name','method_name'));

詳細(xì)說(shuō)明如下:

spl_autoload_register
(PHP 5>= 5.1.2)
spl_autoload_register — 注冊(cè)__autoload()函數(shù)
說(shuō)明
bool spl_autoload_register ([ callback $autoload_function ] )
將函數(shù)注冊(cè)到SPL __autoload函數(shù)棧中。如果該棧中的函數(shù)尚未激活,則激活它們。
如果在你的程序中已經(jīng)實(shí)現(xiàn)了__autoload函數(shù),它必須顯式注冊(cè)到__autoload棧中。因?yàn)?
spl_autoload_register()函數(shù)會(huì)將Zend Engine中的__autoload函數(shù)取代為spl_autoload()或
spl_autoload_call()。
參數(shù)
autoload_function
欲注冊(cè)的自動(dòng)裝載函數(shù)。如果沒(méi)有提供任何參數(shù),則自動(dòng)注冊(cè)autoload的默認(rèn)實(shí)現(xiàn)函數(shù)
spl_autoload()。
返回值
如果成功則返回 TRUE,失敗則返回 FALSE。
注:SPL是Standard PHP Library(標(biāo)準(zhǔn)PHP庫(kù))的縮寫(xiě)。它是PHP5引入的一個(gè)擴(kuò)展庫(kù),其主要功能包括autoload機(jī)制的實(shí)現(xiàn)及包括各種Iterator接口或類(lèi)。SPL autoload機(jī)制的實(shí)現(xiàn)是通過(guò)將函數(shù)指針autoload_func指向自己實(shí)現(xiàn)的具有自動(dòng)裝載功能的函數(shù)來(lái)實(shí)現(xiàn)的。SPL有兩個(gè)不同的函數(shù)spl_autoload, spl_autoload_call,通過(guò)將autoload_func指向這兩個(gè)不同的函數(shù)地址來(lái)實(shí)現(xiàn)不同的自動(dòng)加載機(jī)制。

代碼如下:

test.class.php

<?php 
class abc{ 
function __construct() 
{ 
echo 'www.chhua.com; 
} 
} 
?>

load.php

<?php 
class LOAD 
{ 
static function loadClass($class_name) 
{ 
$filename = $class_name.".class.php"; 
if (is_file($filename)) return include_once $filename; 
} 
} 
/** 
* 設(shè)置對(duì)象的自動(dòng)載入 
* spl_autoload_register — Register given function as __autoload() implementation 
*/ 
spl_autoload_register(array('LOAD', 'loadClass')); 
$a = new Test();//實(shí)現(xiàn)自動(dòng)加載,很多框架就用這種方法自動(dòng)加載類(lèi) 
?> 

spl_autoload_register裝載函數(shù)的正確寫(xiě)法

AutoLoading\loading

<?php
namespace AutoLoading;

class Loadind {
 public static function autoload($className){
        //根據(jù)PSR-O的第4點(diǎn) 把 \ 轉(zhuǎn)換層(目錄風(fēng)格符)   DIRECTORY_SEPARATOR , 
    //便于兼容Linux文件找。Windows 下(/ 和 \)是通用的
    //由于namspace 很規(guī)格,所以直接很快就能找到
    $fileName = str_replace('\\', DIRECTORY_SEPARATOR, DIR . '\\'. $className) . '.php';
    if (is_file($fileName)) {
      require $fileName;
    } else {
      echo $fileName . ' is not exist'; die;
    }    }   
}

index.php

//定義當(dāng)前的目錄絕對(duì)路徑
define('DIR', dirname(__FILE__));
//加載這個(gè)文件
require DIR . '/loading.php';
//采用`命名空間`的方式注冊(cè)。php 5.3 加入的
//也必須是得是static靜態(tài)方法調(diào)用,然后就像加載namespace的方式調(diào)用,注意:不能使用use
spl_autoload_register("\\AutoLoading\\loading::autoload"); 
// 調(diào)用三個(gè)namespace類(lèi)
//定位到Lib目錄下的Name.php 
Lib\Name::test();
//定位到App目錄下Android目錄下的Name.php
App\Android\Name::test();
//定位到App目錄下Ios目錄下的Name.php
App\Ios\Name::test();

相關(guān)文章

最新評(píng)論