PHP PSR0規則 自動加載

一個徹底標準的命名空間(namespace)和類(class)的結構是這樣的:
\<Vendor Name>\(<Namespace>\)*<Class Name>
每一個命名空間(namespace)都必須有一個頂級的空間名(namespace)("組織名(Vendor Name)")。
每一個命名空間(namespace)中能夠根據須要使用任意數量的子命名空間(sub-namespace)。
從文件系統中加載源文件時,空間名(namespace)中的分隔符將被轉換爲 DIRECTORY_SEPARATOR。
類名(class name)中的每一個下劃線_都將被轉換爲一個DIRECTORY_SEPARATOR。
下劃線_在空間名(namespace)中沒有什麼特殊的意義。
徹底標準的命名空間(namespace)和類(class)從文件系統加載源文件時將會加上.php後綴。
組織名(vendor name),空間名(namespace),類名(class name)都由大小寫字母組合而成。
<?php
/**
 * PSR0加載規則
 */

function autoLoad($class_name)
{
    //    \test\context\class
    // 去除字符串前部分ltrim函數中自定的符號,和第二個參數的符號
    // 刪除字符串前的\符號
    $class_name = ltrim($class_name, '\\');
    $file_name = ''; // 文件名
    $name_space = ''; // 命名空間

    // 得到\符號下標準備分割字符串 返回int
    // strrpos 從右到左
    if ($last = strrpos($class_name, '\\')) {
        // 得到命名空間
        $name_space = substr($class_name,0,$last);
        // 得到類命部分
        $class_name = substr($class_name,$last+1);
        // 把全部的\轉換成/ DIRECTORY_SEPARATOR字符串常量 "/"
        $file_name = str_replace('\\',DIRECTORY_SEPARATOR,$name_space).DIRECTORY_SEPARATOR;
    }
    // 判斷class name  是否有 _ 符號 替換成 / 符號 並拼接
    $file_name .= str_replace('_',DIRECTORY_SEPARATOR,$class_name).'.php';

    echo "filename = ".$file_name.PHP_EOL;  // 文件路徑
    echo 'classname= '.$class_name.PHP_EOL;
    echo 'namespace= '.$name_space.PHP_EOL;
    // filename = test/context/class/t.php 文件路徑
    // classname= class_t                  類名稱
    // namespace= test\context             命名空間

    require $file_name;
}
spl_autoload_register('autoLoad');

autoLoad('\test\context\class_t');
相關文章
相關標籤/搜索