国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP中spl_autoload_register函數的用法總結

2024-09-04 11:49:51
字體:
來源:轉載
供稿:網友

spl_autoload_register

(PHP 5 >= 5.1.2)

spl_autoload_register — 注冊__autoload()函數

說明

bool spl_autoload_register ([ callback $autoload_function ] )

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

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

參數

autoload_function

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

返回值

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

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

范例

設我們有一個類文件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,常規的寫法就是

  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中,試圖使用尚未定義的類時會自動調用__autoload函數,所以我們可以通過編寫__autoload函數來讓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(); 

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

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

bool spl_autoload_register ( [callback $autoload_function] )

我們繼續改寫上面那個例子:

  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在尋找類的時候就沒有調用__autoload而是調用我們自己定義的函數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(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 二连浩特市| 梁山县| 莎车县| 娱乐| 西吉县| 容城县| 巴楚县| 凤台县| 长宁县| 溧水县| 永仁县| 承德县| 潍坊市| 汉源县| 龙川县| 阳新县| 宽城| 灵丘县| 嘉义市| 宜兰县| 柳江县| 沐川县| 孙吴县| 特克斯县| 隆子县| 无棣县| 巴青县| 云和县| 沅江市| 南乐县| 湘乡市| 永顺县| 兴宁市| 雅江县| 内江市| 瑞安市| 正镶白旗| 石嘴山市| 浠水县| 易门县| 台北市|