麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > PHP > 正文

PHP中spl_autoload_register函數(shù)的用法總結(jié)

2024-09-04 11:49:51
字體:
供稿:網(wǎng)友

spl_autoload_register

(PHP 5 >= 5.1.2)

spl_autoload_register — 注冊__autoload()函數(shù)

說明

bool spl_autoload_register ([ callback $autoload_function ] )

將函數(shù)注冊到SPL __autoload函數(shù)棧中。如果該棧中的函數(shù)尚未激活,則激活它們。

如果在你的程序中已經(jīng)實現(xiàn)了__autoload函數(shù),它必須顯式注冊到__autoload棧中。因為 spl_autoload_register()函數(shù)會將Zend Engine中的__autoload函數(shù)取代為spl_autoload()或spl_autoload_call()。

參數(shù)

autoload_function

欲注冊的自動裝載函數(shù)。如果沒有提供任何參數(shù),則自動注冊autoload的默認(rèn)實現(xiàn)函數(shù) spl_autoload()。

返回值

如果成功則返回 TRUE,失敗則返回 FALSE。

注:SPL是Standard PHP Library(標(biāo)準(zhǔn)PHP庫)的縮寫。它是PHP5引入的一個擴展庫,其主要功能包括autoload機制的實現(xiàn)及包括各種Iterator接口或類。 SPL autoload機制的實現(xiàn)是通過將函數(shù)指針autoload_func指向自己實現(xiàn)的具有自動裝載功能的函數(shù)來實現(xiàn)的。SPL有兩個不同的函數(shù) spl_autoload, spl_autoload_call,通過將autoload_func指向這兩個不同的函數(shù)地址來實現(xiàn)不同的自動加載機制。

范例

設(shè)我們有一個類文件A.php,里面定義了一個名字為A的類:

  1. <?php    
  2. class A    
  3. {    
  4. public function __construct()    
  5. {    
  6. echo 'Got it.';    
  7. }    
  8.  
  9. <?php 
  10. class A 
  11. public function __construct() 
  12. echo 'Got it.'

然后我們有一個index.php需要用到這個類A,常規(guī)的寫法就是

  1. <?php    
  2. require('A.php');    
  3. $a = new A(); 
  4.  
  5. <?php 
  6. require('A.php'); 
  7. $a = new A(); 

但是有一個問題就是,假如我們的index.php需要包含的不只是類A,而是需要很多類,這樣子就必須寫很多行require語句,有時候也會讓人覺得不爽。

不過在php5之后的版本,我們就不再需要這樣做了。在php5中,試圖使用尚未定義的類時會自動調(diào)用__autoload函數(shù),所以我們可以通過編寫__autoload函數(shù)來讓php自動加載類,而不必寫一個長長的包含文件列表。

例如在上面那個例子中,index.php可以這樣寫:

  1. <?php    
  2. function __autoload($class)    
  3. {    
  4. $file = $class . '.php';    
  5. if (is_file($file)) {    
  6. require_once($file);    
  7. }    
  8. }    
  9.  
  10. $a = new A(); 
  11. //Vevb.com 
  12. <?php 
  13. function __autoload($class
  14. $file = $class . '.php'
  15. if (is_file($file)) { 
  16. require_once($file); 
  17.  
  18. $a = new A(); 

當(dāng)然上面只是最簡單的示范,__autoload只是去include_path尋找類文件并加載,我們可以根據(jù)自己的需要定義__autoload加載類的規(guī)則。

此外,假如我們不想自動加載的時候調(diào)用__autoload,而是調(diào)用我們自己的函數(shù)(或者類方法),我們可以使用spl_autoload_register來注冊我們自己的autoload函數(shù)。它的函數(shù)原型如下:

bool spl_autoload_register ( [callback $autoload_function] )

我們繼續(xù)改寫上面那個例子:

  1. <?php    
  2. function loader($class)    
  3. {    
  4. $file = $class . '.php';    
  5. if (is_file($file)) {    
  6. require_once($file);    
  7. }    
  8. }    
  9.  
  10. spl_autoload_register('loader');    
  11.  
  12. $a = new A(); 
  13.  
  14. <?php 
  15. function loader($class
  16. $file = $class . '.php'
  17. if (is_file($file)) { 
  18. require_once($file); 
  19.  
  20. spl_autoload_register('loader'); 
  21.  
  22. $a = new A(); 

這樣子也是可以正常運行的,這時候php在尋找類的時候就沒有調(diào)用__autoload而是調(diào)用我們自己定義的函數(shù)loader了。同樣的道理,下面這種寫法也是可以的:

  1. <?php    
  2. class Loader    
  3. {    
  4. public static function loadClass($class)    
  5. {    
  6. $file = $class . '.php';    
  7. if (is_file($file)) {    
  8. require_once($file);    
  9. }    
  10. }    
  11. }    
  12.  
  13. spl_autoload_register(array('Loader''loadClass'));    
  14.  
  15. $a = new A(); 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 三人弄娇妻高潮3p视频 | 成人午夜天堂 | 草莓视频在线导航 | 国内成人自拍视频 | 羞羞视频免费视频欧美 | 久久精品中文字幕一区二区三区 | 狠狠99| 久久91亚洲精品久久91综合 | 国产一级一级 | 免费观看又色又爽又黄的崩锅 | 亚洲精品在线观看网站 | 日本成人二区 | 日本欧美一区二区三区在线播 | 一级黄色欧美 | 亚洲精中文字幕二区三区 | 看91视频| 成片免费观看视频大全 | 国产午夜免费福利 | 色中色激情影院 | 久久久久中精品中文字幕19 | 欧美成年私人网站 | 亚洲无马在线观看 | 国产精品久久久久久久久久iiiii | 久久久中| 成人午夜淫片a | 久久国产综合视频 | 国产一区二区三区影视 | 99精品国产一区二区三区 | 小情侣嗯啊哦视频www | 国产精品久久久久久久久久久久久久久久 | 99精品视频99| 久久99在线| 少妇一级淫片高潮流水电影 | 热99re久久免费视精品频软件 | 欧美成人精品欧美一级乱黄 | 国产午夜精品久久久久 | 国产精品视频yy9299一区 | 91中文字幕在线观看 | 久久精品成人免费国产片桃视频 | 视频一区国产精品 | 天天干天天碰 |