首页 > php > PSR-0是什么?

PSR-0是什么?

作者:bin

PSR是由PHP Framework Interoperability Group(PHP通用性框架小组)发布的一系列标准/规范,目前包括了PSR-0~PSR-4共4个,而PSR-0就是其中的自动加载标准(其后的PSR-4称为改进的自动加载的标准,是PSR-0的补充。PSR-0使用更广泛)

psr-0实际上是在自动加载时对命名空间对进一步规范化,以便自动加载程序能正常运行

官方md : https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

强制性

  1. 1、每个namespace必须有一个顶层的namespace(”Vendor Name”提供者名字)
  2. 2、一个完全合格的namespace和class必须符合这样的结构 \*
  3. 3、每个namespace可以有多个子namespace
  4. 4、当从文件系统中加载时,每个namespace的分隔符要转换成 DIRECTORY_SEPARATOR(操作系统路径分隔符)
  5. 5、在CLASS NAME(类名)中,每个下划线(_)符号要转换成DIRECTORY_SEPARATOR。在namespace中,下划线(_)符号是没有(特殊)意义的。
  6. 6、当从文件系统中载入时,合格的namespace和class一定是以 .php 结尾的
  7. 7、verdor name,namespaces,class名可以由大小写字母组合而成(大小写敏感的)

 

例子:

  1. 1、\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
  2. 2、\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
  3. 3、\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
  4. 4、\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

下面是一个按照如上标准进行自动加载的简单范例:

<?php
function autoload($className)
{
//这里的$className一般是用namespace的方式来引用的,文章开头已有介绍
//去除$className左边的'\' 这是PHP5.3的一个bug,详见https://bugs.php.net/50731
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
//找到最后一个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;

您必须 [ 登录 ] 才能发表留言!