php基礎,php自動載入的實現程式碼示例

木大大發表於2021-05-16

spl_autoload_register的使用

spl_autoload_register() 作為 __autoload() 的替代函式

使用示例

// 定義一個檔案載入函式
function my_autoloader($class) {
   // exit($class);
    include 'classes/' . $class . '.class.php';
}

// 將檔案載入函式註冊到 spl_autoload_register() 中
spl_autoload_register('my_autoloader');

// 或者使用匿名函式將檔案載入函式註冊進spl_autoload_register() 中 
/*
spl_autoload_register(function ($class) {
    exit($class);
    include 'classes/' . $class . '.class.php';
});
*/

// 通過呼叫類來出發自動載入
new \APP\Demo();

完整程式碼示例

<?php

//定義當前的目錄絕對路徑
define('DIR', dirname(__FILE__));

class Loading {
    public static function autoload($className)
    {
        //根據PSR-O的第4點 把 \ 轉換層(目錄風格符) DIRECTORY_SEPARATOR ,
        //便於相容Linux檔案找。Windows 下(/ 和 \)是通用的
        //由於namspace 很規格,所以直接很快就能找到
        $fileName = str_replace('\\', DIRECTORY_SEPARATOR, DIR .'\\'. $className).'.php';

        if(is_file($fileName)){
            require $fileName;
        }else{
            echo $fileName .' is not exist';die;
        }
    }
}

//採用`名稱空間`的方式註冊。php 5.3 加入的
//也必須是得是static靜態方法呼叫,然後就像載入namespace的方式呼叫,注意:不能使用use
spl_autoload_register("Loading::autoload");

//通過呼叫類則會自動觸發自動載入
new \APP\Demo();
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章