一個徹底標準的命名空間(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');