PHP函數__autoload()和spl_autoload_register()

來源:互聯網
上載者:User
PHP函數__autoload()和spl_autoload_register()

__autoload($classname){

}

當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
class Test
{
function __construct()
{
echo '希望和PHP,Flex高手成為朋友。一起學習,共同奮鬥!!!QQ:1055983238';
}
}
?>
load.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();//實現自動載入,很多架構就用這種方法自動載入類
?>

class autoload
{
public static function load( $class name )
{

$filename = "/home/user/class/".$classname."class.php";
if (file_exists($filename )) {
require_once $filename ;
}
}
}

function __autoload( $class name )
{ // 這個是預設的 autoload 方法

$filename = "/home/user/class/".$classname."class.php";
if (file_exists($filename )) {
require_once $filename ;
}
}

// 註冊一個 autoloader
spl_autoload_register( 'autoload::load' );
/**
* __autoload 方法在 spl_autoload_register 後會失效,因為 autoload_func 函數指標已指向 spl_autoload 方法
* 可以通過下面的方法來把 _autoload 方法加入 autoload_functions list
*/
spl_autoload_register( '__autoload' );
// 註:下面的類看上去沒有定義,但其實系統根據sql_autoload_register提供的路徑會自動去/home/user// /class/*.class.php下搜尋foo.class.php檔案,如果沒找到才報錯。
$foo = new foo();
$foo ->bar();
?>

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.