php psr 编码规范_PHP规范PSR0和PSR4的理解

一、PSR0简介下文描述了若要使用一个通用的自动加载器(autoloader),你所需要遵守的规范:一个完全标准的命名空间(namespace)和类(class)的结构是这样的:\\(\)*每个命名空间(namespace)都必须有一个顶级的空间名(namespace)("组织名(Vendor Name)")。每个命名空间(namespace)中可以根据需要使用任意数量的子命名空间(sub-namespace)。从文件系统中加载源文件时,空间名(namespace)中的分隔符将被转换为 DIRECTORY_SEPARATOR。类名(class name)中的每个下划线_都将被转换为一个DIRECTORY_SEPARATOR。下划线_在空间名(namespace)中没有什么特殊的意义。完全标准的命名空间(namespace)和类(class)从文件系统加载源文件时将会加上.php后缀。组织名(vendor name),空间名(namespace),类名(class name)都由大小写字母组合而成。参考:http://www.php-fig.org/psr/psr-0/以下,列出PSR0构建的规范类的几种形式:31e56f4dcbed3dc3d1a73e10186d42a3.png二、实现PSR0自动加载

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');

三、PSR4简介这个 PSR 描述的是通过文件路径自动载入类的指南;它作为对 PSR-0 的补充;根据这个 指导如何规范存放文件来自动载入;术语「类」是一个泛称;它包含类,接口,traits 以及其他类似的结构;完全限定类名应该类似如下范例:()*完全限定类名必须有一个顶级命名空间(Vendor Name);完全限定类名可以有多个子命名空间;完全限定类名应该有一个终止类名;下划线在完全限定类名中是没有特殊含义的;字母在完全限定类名中可以是任何大小写的组合;所有类名必须以大小写敏感的方式引用;当从完全限定类名载入文件时:在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录。在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配;终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配;自动载入器的实现不可抛出任何异常,不可引发任何等级的错误;也不应返回值;参考:http://www.php-fig.org/psr/psr-4/在其中有以下的类实例,但是相对与PSR0,却是不太容易明白a4ad6735cb2ad763f1f41ee876b7215d.png首先,\Symfony\Core\Request和\Zend\Acl很好理解,其满足PSR0规范,但是\Acme\Log\Writer\File_Writer就不太好理解了。四、Composer对PSR4的处理看了Composer对PSR4的处理,才能比较容易理解PSR4。自动生成的PSR4配置文件名称为autoload_psr4.php(PSR0的是autoload_namespace.php),配置文件返回一个关联数组,键是名称空间的前缀,值是名称空间前缀对应的路径。以\Acme\Log\Writer\File_Writer作为例子,其名称空间前缀是\Acme\Log\Writer,则其在autoload_psr4.php表示为'\\Acme\\Log\\Writer' => (array) './acme-log-writer/lib/'使用自动加载时,先通过名称空间的前缀,找到对应的映射路径,在根据PSR0规范找到对应的类定义文件。但是这里有些例外,类名中的下划线在PSR4中是不需要转换成目录的。使用PSR4,我觉得有2个好处:1. 减少代码目录的深度2. 可以通过前缀快速找到映射目录,提高自动加载的效率

5a1985131fe90ca5394e18e37f757354.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值