在 PHP 5.3 之前,__autoload 函數拋出的異常不能被 catch 語句塊捕獲並會導致一個致命錯誤(Fatal Error)。
盡管 __autoload() 函數也能自動加載類和接口,但更建議使用 spl_autoload_register() 函數。 spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動加載(同一個應用中,可以支持任意數量的加載器,比如第三方庫中的)。因此,不再建議使用 __autoload() 函數,在以后的版本中它可能被棄用。
autoload_function
這是一個函數【方法】名稱,可以是字符串或者數組(調用類方法使用)。這個函數(方法)的功能就是,來把需要new 的類文件包含include(requeire)進來,這樣new的時候就不會找不到文件了。其實就是封裝整個項目的include和require功能。
throw
此參數設置了 autoload_function 無法成功注冊時, spl_autoload_register()是否拋出異常。
prepend
如果是 true,spl_autoload_register() 會添加函數到隊列之首,而不是隊列尾部。
test.php
<?php class test { function __construct(){ echo "test 類被初始化了<br>"; } function show(){ //當前頁面是utf8編碼 $str = '中文89PHP'; echo strlen($str)."<br/>"; //中文+數字+英文:6 + 2 + 3 = 11 echo mb_strlen($str, 'gbk')."<br/>"; //中文+數字+英文:3 + 2 + 3 = 8 echo mb_strlen($str, 'utf8')."<br/>"; //中文+數字+英文:2 + 2 + 3 = 7 //數據庫 varchar 一個中文占一個字符長度 } }
my_autoload.php 文件
<?php //方法一:自動加載函數 5.0之后棄用 /*function __autoload($class) { $file = $class . '.php'; if ( is_file($file) ) { require_once($file); } } $test = new test(); //輸出:test 類被初始化了 */ //使用 spl_autoload_register 函數 //方法二: class my_autoload { public static function autoload($class){ $file = $class . '.php'; if ( is_file($file) ) { require_once($file); } } } //注冊加載 spl_autoload_register("my_autoload::autoload",true,true); $test = new test(); //輸出:test 類被初始化了 $test->show(); ?>

