spl_autoload_register 和 __autoload()魔術方法


在 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();

?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM