1. 程式人生 > >PHP框架優化-spl_autoload_register()用法和__autoload()

PHP框架優化-spl_autoload_register()用法和__autoload()

寫在前面

最近真是忙壞了,在一個框架的基礎上增加REDIS的基類以及快取設計。所以對之前框架進行了一些優化,重新又研究了下一些php基礎的函式。這些函式可能在框架中很常用,之前見過N多次,這次就記錄下來。有時間的話出一個PHP框架優化系列,關於介紹也是網上找的,挺容易理解,這裡複製下。

__autoload()的用法就不再說了,以前已經在我的WEB開發筆記中說過。PHP __autoload函式(自動載入類檔案)的使用方法, 原文地址:http://www.jb51.net/article/29625.htm
說一說,spl_autoload_register()的用法吧,很簡單,可以這樣理解,就是宣告一個自定義__autoload(),你可以是A函式,也可以是B函式,想怎麼樣就怎麼樣,函式體的寫法,當然要和__autoload()一樣就OK 了。

當PHP找不到類檔案會呼叫這個方法,當註冊了自己的函式或方法時,PHP不會呼叫__autoload()函式,而會呼叫自定義的函式

spl_autoload_register(‘func_name’);
spl_autoload_register(array(‘class_name’,’method_name’));
詳細說明如下:
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指向這兩個不同的函式地址來實現不同的自動載入機制。
程式碼如下:
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; 
} 
} 
/** 
* 設定物件的自動載入 
* spl_autoload_register — Register given function as __autoload() implementation 
*/
spl_autoload_register(array('LOAD', 'loadClass')); $a = new Test();//實現自動載入,很多框架就用這種方法自動載入類 ?>