psr-0
每一個完整的命名空間都需要有以下結構\vendor\namespace\classname
每個命名空間需要有一個頂級的命名空間 \vendor
每個命名空間的分隔符轉換爲DIRECTORY_SEPARATOR ,當加載文件的時候
每個_字符 在類中都會轉化爲DIRECTORY_SEPARATOR
完整的命令空間和類都以.php結尾當加載文件的時候
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\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
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;
}
spl_autoload_register('autoload');
2.psr-1的規範
-
PHP代碼文件 必須 以
<?php
或<?=
標籤開始; -
PHP代碼文件 必須 以
不帶 BOM 的 UTF-8
編碼; -
PHP代碼中 應該 只定義類、函數、常量等聲明,或其他會產生
副作用
的操作(如:生成文件輸出以及修改 .ini 配置文件等),二者只能選其一; -
命名空間以及類 必須 符合 PSR 的自動加載規範:PSR-4 中的一個;
-
類的命名 必須 遵循
StudlyCaps
大寫開頭的駝峯命名規範; -
類中的常量所有字母都 必須 大寫,單詞間用下劃線分隔;
- 方法名稱 必須 符合
camelCase
式的小寫開頭駝峯命名規範。
類的屬性命名 可以 遵循:
- 大寫開頭的駝峯式 (
$StudlyCaps
) - 小寫開頭的駝峯式 (
$camelCase
) - 下劃線分隔式 (
$under_score
camelCase()
式的小寫開頭駝峯命名規範。