此規範已被棄用 - 本規範已於2014年10月21日被標記爲棄用,目前最新的替代規範爲 [PSR-4] 。php
本文是爲自動加載器(autoloader)
實現通用自動加載,所須要遵循的編碼規範。git
一個標準的 命名空間(namespace) 與 類(class) 名稱的定義必須符合如下結構:\<Vendor Name>\(<Namespace>\)*<Class Name>
;github
其中Vendor Name
爲每一個命名空間都必需要有的一個頂級命名空間名;函數
須要的話,每一個命名空間下能夠擁有多個子命名空間;ui
當根據完整的命名空間名從文件系統中載入類文件時,每一個命名空間之間的分隔符都會被轉換成文件夾路徑分隔符;編碼
類名稱中的每一個 _
字符也會被轉換成文件夾路徑分隔符,而命名空間中的 _
字符則是無特殊含義的。spa
當從文件系統中載入標準的命名空間或類時,都將添加 .php
爲目標文件後綴;code
組織名稱(Vendor Name)
、命名空間(Namespace)
以及 類的名稱(Class Name)
可由任意大小寫字母組成。get
\Doctrine\Common\IsolatedClassLoader
=> /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
it
\Symfony\Core\Request
=> /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl
=> /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message
=> /path/to/project/lib/vendor/Zend/Mail/Message.php
\namespace\package\Class_Name
=> /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name
=> /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
以上是使用通用自動加載必須遵循的最低規範標準, 可經過如下的示例函數 SplClassLoader 載入 PHP 5.3 的類文件,來驗證你所寫的命名空間以及類是否符合以上規範。
如下示例函數爲本規範的一個簡單實現。
<?php function autoload($className) { $className = ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = strrpos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; require $fileName; }
如下的 gist 是 一個 SplClassLoader 類文件的實例,若是你遵循了以上規範,能夠把它用來載入你的類文件。 這也是目前 PHP 5.3 建議的類文件載入方式。