首頁  >  文章  >  後端開發  >  PHP實作自動載入相關函數

PHP實作自動載入相關函數

小云云
小云云原創
2018-03-17 09:52:581547瀏覽

PHP在執行的時候,如果發現需要使用一個類別(只要是和這個類別相關的任何的操作),而此時,當前腳本並沒有這個類別的定義代碼!那麼PHP此時會自動的呼叫一個名字為__autoload()的一個函數!並且,在呼叫的時候,會給該函數一個參數,這個參數就是目前需要的類別的類別名稱。

#自动加载 函数function __aotuload($class_name){
    if(!file_exists("./".$class_name.".class.php")){
        include "./".$class_name.".class.php";
    }else{
        die("系统错误,没有找到相关的类!");
    }
}

註冊其他的自動載入函數

一般的,系統的自動載入函數就是__autoload(),但是,隨著專案的擴展,有可能出現多個自動載入函數,例如,被載入的檔案裡面又出現了自動載入函數,這個時候就出現了函數的重名的問題!

我們一把都不使用__autoload函數,而是註冊使用者自己的自動載入函數以避免上述情況的發生!

#注册其他的自动加载函数 解决自动加载函数重名问题function f1($class_name){
    if(!file_exists("./".$class_name.".class.php")){
        include "./".$class_name.".class.php";
    }else{
        die("系统错误,没有找到相关的类!");
    }
}
spl_autoload_register('f1');

要注意以下的幾點:

1,  註冊一定要發生在需要某個類別之前!

2,  可以註冊多個自動載入函數,在需要的類別檔案載入成功之前,會依序的依照註冊的順序執行,直到找到為止!

3,  一旦註冊了其他的自動載入函數,那麼系統預設的那個__autoload函數就失效了!

此時,如果想要繼續使用__autoload函數,必須像註冊其他的普通函數一樣重新註冊!

註冊自動載入方法

在物件導向的程式設計風格中,我們一般會將使用者自訂的自動載入函數封裝到一個類別中!

靜態方法的註冊

語法形式為:

spl_autoload_register(array('類別名稱','方法名稱'));

另外,註冊靜態方法還有一個比較簡單的形式:

spl_autoload_register('類別名稱::方法名稱');

非靜態方法的註冊

此時,註冊的步驟如下:

1,  首先要實例化一個物件

2,  再使用spl_autoload_register()註冊,此時函數的參數形式如下:

spl_autoload_register( array(物件變量,'方法名稱'));

#注册自动加载方法class Common {
    public static function autoload($class_name){
        if(!file_exists("./".$class_name.".class.php")){
            include "./".$class_name.".class.php";
        }else{
            die("系统错误,没有找到相关的类!");
        }
    }
}
//spl_autoload_register("Common::autoload");
spl_autoload_register(array("Common","autoload"));

相關推薦:

#PHP簡單路由與類別自動載入功能的實作程式碼

##PHP檔案的自動載入autoloading詳解

深度總結PHP自動載入#

以上是PHP實作自動載入相關函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn