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()
式的小写开头驼峰命名规范。