PHP规范PSR0和PSR4的理解
一、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)
都由大小写字母组合而成。
二、实现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简介
术语「类」是一个泛称;它包含类,接口,traits 以及其他类似的结构;
完全限定类名应该类似如下范例:
<NamespaceName>(<SubNamespaceNames>)*<ClassName>
- 完全限定类名必须有一个顶级命名空间(Vendor Name);
- 完全限定类名可以有多个子命名空间;
- 完全限定类名应该有一个终止类名;
- 下划线在完全限定类名中是没有特殊含义的;
- 字母在完全限定类名中可以是任何大小写的组合;
- 所有类名必须以大小写敏感的方式引用;
当从完全限定类名载入文件时:
- 在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录。
- 在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配;
- 终止类名对应一个以
.php
结尾的文件。文件名必须和终止类名大小写匹配;
自动载入器的实现不可抛出任何异常,不可引发任何等级的错误;也不应返回值;
首先,\Symfony\Core\Request和\Zend\Acl很好理解,其满足PSR0规范,但是\Acme\Log\Writer\File_Writer就不太好理解了。
四、Composer对PSR4的处理
- '\\Acme\\Log\\Writer' => (array) './acme-log-writer/lib/'
使用自动加载时,先通过名称空间的前缀,找到对应的映射路径,在根据PSR0规范找到对应的类定义文件。但是这里有些例外,类名中的下划线在PSR4中是不需要转换成目录的。
PHP规范PSR0和PSR4的理解的更多相关文章
- PSR-0到PSR-4编程规范
PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR-[0-4] ...
- php composer 使用 以及 psr0和psr4的真正区别
composer 使用 项目和库之间唯一的区别是,你的项目是一个没有名字的包 包名不区分大小写,但惯例是使用小写字母,并用连字符作为单词的分隔 入门比较好资源: 官网适合读一遍 https://do ...
- psr-0和psr-4命名规范(未完)
这些命名规范都是为为自动加载服务(避免项目中有很多的include和require) psr-0: 1.命名空间必须与绝对路径一致 2.类名首字母必须大写 3.除入口文件外,其他“.php”必须只有一 ...
- PSR-4 规范实例讲解 -- php 自动加载
参考 参考文档:https://www.kancloud.cn/thinkphp/php-fig-psr/3144 参考实例:https://github.com/php-fig/fig-standa ...
- PSR规范0-4整理
PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...
- 【转载】PHP PSR-1 基本代码规范(中文版)
基本代码规范 本篇规范制定了代码基本元素的相关标准, 以确保共享的PHP代码间具有较高程度的技术互通性. 关键词 "必须"("MUST")."一定不可 ...
- PHP编码规范PSR-1
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- psr的规范
基本代码规范 本篇规范制定了代码基本元素的相关标准, 以确保共享的PHP代码间具有较高程度的技术互通性. 关键词 "必须"("MUST")."一定不可 ...
- PSR规范
背景 Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年.FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和 ...
随机推荐
- vsphere storage appliance工作原理和实施
摘录自:http://www.07net01.com/storage_networking/VMwarexunihuazhiVSA_vSphere_Storage_Appliance_qunji_yi ...
- 树莓派系统(Debain)中设置固定静态IP地址
一.方法: 1.使用ssh登陆,使用以下命令设置静态ip. sudo nano /etc/dhcpcd.conf2.在dhcpcd.conf后添加以下内容(网上的方法): interface eth0 ...
- stingray中modal window
自定义内容modal window //show window for D&B suggestions function showDBMatch(resp) { console.log('xx ...
- REP report开发技巧
其他文章 报表开发介绍 posted @ 2017-02-23 18:525 by Mark
- cmder、cmd、python 中文乱码问题
cmd下echo中文没有问题,但是进入python模式后就中文乱码,cmder更是echo也乱码 其实是要配置默认code page, cmd默认是ansi的编码,中文自然乱码 CMD chcp 65 ...
- Java实战_手把手编写记事本
Java运用SWT插件编写桌面记事本应用程序 可实现windows系统桌面记事本基本功能.傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 须要工具:Eclipse(带SWT插件) ...
- Java IO的应用之实现大文件复制
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827481.html 用IO进行文件复制,实质就是用FileInputStream链接要复制的文件,按一定规 ...
- 修改Ubuntu默认运行级别,启动字符界面
Ubuntu的默认开机的runlevel是2,可以用runlevel来查看当前的默认运行级别. debian系(ubuntu是基于debian)的Linux一直是用runlevel 2来默认启动,并且 ...
- Calling a PL/SQL procedure in ODI
新建procedure 新建一个测试表格EMP: CREATE TABLE EMP ( ) CONSTRAINT PK_EMP PRIMARY KEY, ENAME ), JOB ), MGR ), ...
- 从头開始学 RecyclerView(三) 封装简化
前言 上一篇的代码,也是基于这些封装的. RV的封装,跟曾经的listView之类的封装,大同小异. 这里,从@devwiki 处,将代码搬过来.基本无改动 BaseHolder的优化 使ViewHo ...