PHP函數(shù)spl_autoload_register()用法和__autoload()介紹
__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();
- PHP SPL使用方法和他的威力
- php中spl_autoload詳解
- PHP spl_autoload_register實(shí)現(xiàn)自動(dòng)加載研究
- PHP SPL標(biāo)準(zhǔn)庫(kù)之文件操作(SplFileInfo和SplFileObject)實(shí)例
- PHP中spl_autoload_register()函數(shù)用法實(shí)例詳解
- 解析PHP SPL標(biāo)準(zhǔn)庫(kù)的用法(遍歷目錄,查找固定條件的文件)
- PHP SPL標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)結(jié)構(gòu)棧(SplStack)介紹
- PHP SPL標(biāo)準(zhǔn)庫(kù)之SplFixedArray使用實(shí)例
- PHP SPL標(biāo)準(zhǔn)庫(kù)中的常用函數(shù)介紹
- PHP SPL標(biāo)準(zhǔn)庫(kù)之接口(Interface)詳解
- PHP SPL 被遺落的寶石【SPL應(yīng)用淺析】
相關(guān)文章
生成ubuntu自動(dòng)切換壁紙xml文件的php代碼
運(yùn)行代碼后在圖片目錄下會(huì)生成yuxing.xml,方便ubuntu自動(dòng)切換壁紙.2010-07-07PHP利用ChatGPT實(shí)現(xiàn)輕松創(chuàng)建用戶(hù)注冊(cè)頁(yè)面
ChatGPT?是?OpenAI?開(kāi)發(fā)的?GPT語(yǔ)言模型的變體,它是一種大型單向語(yǔ)言模型。本文就來(lái)利用ChatGPT創(chuàng)建簡(jiǎn)單的用戶(hù)注冊(cè)頁(yè)面,感興趣的可以了解一下2023-02-02php實(shí)現(xiàn)猴子選大王問(wèn)題算法實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)猴子選大王問(wèn)題算法,實(shí)例分析了算法的原理與解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04教你識(shí)別簡(jiǎn)單的免查殺PHP后門(mén)
這類(lèi)后門(mén)讓網(wǎng)站、服務(wù)器管理員很是頭疼,經(jīng)常要換著方法進(jìn)行各種檢測(cè),而很多新出現(xiàn)的編寫(xiě)技術(shù),用普通的檢測(cè)方法是沒(méi)法發(fā)現(xiàn)并處理的。今天我們細(xì)數(shù)一些有意思的PHP一句話(huà)木馬。2015-09-09php禁止某ip或ip地址段訪(fǎng)問(wèn)的方法
這篇文章主要介紹了php禁止某ip或ip地址段訪(fǎng)問(wèn)的方法,涉及服務(wù)器變量$_SERVER、文件及字符串的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02iis6手工創(chuàng)建網(wǎng)站后無(wú)法運(yùn)行php腳本的解決方法
下面小編就為大家?guī)?lái)一篇iis6手工創(chuàng)建網(wǎng)站后無(wú)法運(yùn)行php腳本的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06PHP 函數(shù)學(xué)習(xí)簡(jiǎn)單小結(jié)
下面是一些php下經(jīng)常用的函數(shù),都是些必須要知道的函數(shù),只有知道有個(gè)函數(shù)與功能,才可能組裝成完整的功能強(qiáng)大的系統(tǒng)。2010-07-07在Mac OS下搭建LNMP開(kāi)發(fā)環(huán)境的步驟詳解
這篇文章主要介紹了在Mac OS下搭建LNMP開(kāi)發(fā)環(huán)境的步驟,文中通過(guò)一步步的步驟介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03PHP設(shè)計(jì)模式之模板方法模式Template Method Pattern詳解
在我們實(shí)際開(kāi)發(fā)中,如果一個(gè)方法極其復(fù)雜時(shí),如果我們將所有的邏輯寫(xiě)在一個(gè)方法中,那維護(hù)起來(lái)就很困難,要替換某些步驟時(shí)都要重新寫(xiě),這樣代碼的擴(kuò)展性就很差,當(dāng)遇到這種情況就要考慮今天的主角——模板方法模式2022-12-12