psr-4规范
来源:互联网 发布:linux snmp 编辑:程序博客网 时间:2024/06/08 17:40
PSR-4和PSR-0最大的区别是对下划线(underscore)的定义不同。PSR-4中,在类名中使用下划线没有任何特殊含义。而PSR-0则规定类名中的下划线_会被转化成目录分隔符。[
https://segmentfault.com/a/1190000002521658
一、PSR0简介
下文描述了若要使用一个通用的自动加载器(autoloader)
,你所需要遵守的规范:
- 一个完全标准的
命名空间(namespace)
和类(class)
的结构是这样的:\<Vendor Name>\(<Namespace>\)*<Class Name>
- 每个
命名空间(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构建的规范类的几种形式:
二、实现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 以及其他类似的结构;
完全限定类名应该类似如下范例:
<NamespaceName>(<SubNamespaceNames>)*<ClassName>
- 完全限定类名必须有一个顶级命名空间(Vendor Name);
- 完全限定类名可以有多个子命名空间;
- 完全限定类名应该有一个终止类名;
- 下划线在完全限定类名中是没有特殊含义的;
- 字母在完全限定类名中可以是任何大小写的组合;
- 所有类名必须以大小写敏感的方式引用;
当从完全限定类名载入文件时:
- 在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录。
- 在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配;
- 终止类名对应一个以
.php
结尾的文件。文件名必须和终止类名大小写匹配;
自动载入器的实现不可抛出任何异常,不可引发任何等级的错误;也不应返回值;
参考:http://www.php-fig.org/psr/psr-4/
在其中有以下的类实例,但是相对与PSR0,却是不太容易明白
四、Composer对PSR4的处理
看了Composer对PSR4的处理,才能比较容易理解PSR4。自动生成的PSR4配置文件名称为autoload_psr4.php(PSR0的是autoload_namespace.php),配置文件返回一个关联数组,键是名称空间的前缀,值是名称空间前缀对应的路径。
以\Acme\Log\Writer\File_Writer作为例子,其名称空间前缀是\Acme\Log\Writer,则其在autoload_psr4.php表示为
- '\<span style="font-size:14px;">\Acme\\Log\\Writer</span>' => (array) './acme-log-writer/lib/'
使用PSR4,我觉得有2个好处:
1. 减少代码目录的深度
2. 可以通过前缀快速找到映射目录,提高自动加载的效率
阅读全文
0 0
- psr-4规范
- PHP PSR-4与PSR-0规范
- 「PSR 规范」PSR-4 自动加载规范
- 关于php规范psr-4
- PSR [0-4]规范
- PHP编码规范/PSR-4
- PSR-4 自动加载规范
- PSR规范
- PSR规范
- PSR规范
- PSR规范
- psr规范
- PHP中PSR-[0-4]规范
- PSR-4翻译,PHP Autoloader 规范
- PHP编码规范之PSR-4
- PHP PSR-4 基本代码规范(中文版)
- 关于php规范的PSR-4
- PHP中PSR-[0-4]规范
- wso2 API 调研
- QQ聊天框中发送url网站链接预览内容修改方法
- leetcode 67. Add Binary
- [LeetCode] 96. Unique Binary Search Trees
- Git 简易本地库建立以及分享
- psr-4规范
- python Django搭建简单的个人博客网站(三)
- [ahk]双按Home键熄屏
- 关于banner获取网络图片设置自动轮播
- mysql中按指定顺序排列
- 【Android应用开发】-(19)Android 串口编程原理和实现方式(附源码)
- Mysql 汉字+英文字母拼音排序
- git创建文件夹及其他操作
- bzoj 1297: [SCOI2009]迷路(矩阵快速幂)