首頁  >  文章  >  後端開發  >  PHP自動載入機制介紹-spl_autoload_register()函數,php類別自動載入

PHP自動載入機制介紹-spl_autoload_register()函數,php類別自動載入

angryTom
angryTom轉載
2019-10-14 18:10:174787瀏覽

* include 和 require 功能是一樣的,它們的不同在於 include 出錯時只會產生警告,而 require 會拋出錯誤終止腳本。

* include_once 和 include 唯一的區別在於 include_once 會檢查檔案是否已引入,如果是則不會重複引入。

spl_autoload_register() 函數是實現自動載入未定義類別功能的重要方法,所謂的自動載入意思是我們的new 一個類別的時候必須先include或require的類別文件,如果沒有include或require ,則會報錯。那這樣我們就必須在文件頭寫上許多include或require文件,非常麻煩,

為了使得沒有include或require類的時候也正常new一個類,所以有了自動載入的概念,也是說new一個類別之前不用事先包含類別檔案也可以正常new,這樣我們的檔案頭部就不用包含許多include(require)。其實這算一種封裝!

用spl_autoload_register函數可以實作上面說的功能,我們來看看實作原理。

這個函數的參數如下:

#第一個參數:autoload_function

這是一個函數【方法】名稱,可以是字串或陣列(呼叫類別方法使用)。這個函數(方法)的功能就是,來把需要new 的類別檔案包含include(requeire)進來,這樣new的時候就不會找不到檔案了。其實就是封裝整個專案的include和require功能。

第二個參數:throw

此參數設定了 autoload_function 無法成功註冊時, spl_autoload_register()是否拋出例外。

第三個參數:prepend

如果是 true,spl_autoload_register() 會新增函數到佇列之首,而不是佇列尾端。

當我們new一個類,而這個類別文件沒有被包含時候就會執行這個autoload_function方法

先來看一個錯誤例子:

<?php
//当我们直接new一个未包含class类文件时候会报错
$objDemo = new AutoloadClass();

正確的使用spl_autoload_register() 函數

透過下面例子我們可以看到,當new一個未包含的類別時候,會去執行spl_autoload_register第一個參數函數名稱的函數,這個函數有一個參數就是需要new的類別名,這個函數的功能就是把這個類別給包含進來(類別名稱和檔案名稱一致),這樣就實作了自動載入功能。原理就是這樣,不是很複雜。

<?php
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
//文件autoloadDemo.php文件
spl_autoload_register(&#39;myAutoLoad&#39;, true, true);
function myAutoLoad($className){
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}

另外,我們可以改為匿名函數來實現:

<?php
 
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
spl_autoload_register(function ($className)
{
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}, true, true);
$objDemo = new AutoloadClass();

 更多PHP相關知識,請訪問PHP中文網

以上是PHP自動載入機制介紹-spl_autoload_register()函數,php類別自動載入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:www.whmblog.cn。如有侵權,請聯絡admin@php.cn刪除