参考

参考文档:https://www.kancloud.cn/thinkphp/php-fig-psr/3144

参考实例:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

基本代码规范

  • PHP代码文件必须以 <?php 或 <?= 标签开始;

  • PHP代码文件必须以 不带BOM的 UTF-8 编码;

  • PHP代码中应该只定义类、函数、常量等声明,或其他会产生 从属效应 的操作(如:生成文件输出以及修改.ini配置文件等),二者只能选其一;

  • 命名空间以及类必须符合 PSR 的自动加载规范:PSR-0 或 PSR-4 中的一个;

  • 类的命名必须遵循 StudlyCaps 大写开头的驼峰命名规范;

  • 类中的常量所有字母都必须大写,单词间用下划线分隔;

  • 方法名称必须符合 camelCase 式的小写开头驼峰命名规范。

代码风格规范

  • 代码必须遵循 PSR-1 中的编码规范 。

  • 代码必须使用4个空格符而不是 tab键 进行缩进。

  • 每行的字符数应该软性保持在80个之内, 理论上一定不可多于120个, 但一定不能有硬性限制。

  • 每个 namespace 命名空间声明语句和 use 声明语句块后面,必须插入一个空白行。

  • 类的开始花括号({)必须写在函数声明后自成一行,结束花括号(})也必须写在函数主体后自成一行。

  • 方法的开始花括号({)必须写在函数声明后自成一行,结束花括号(})也必须写在函数主体后自成一行。

  • 类的属性和方法必须添加访问修饰符(private、protected 以及 public), abstract 以及 final必须声明在访问修饰符之前,而 static必须声明在访问修饰符之后。

  • 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不能有。

  • 控制结构的开始花括号({)必须写在声明的同一行,而结束花括号(})必须写在主体后自成一行。

  • 控制结构的开始左括号后和结束右括号前,都一定不能有空格符。

Autoloader

  1. 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其它类似结构。
  2. 一个完整的类名需具有以下结构

    \<命名空间>(\<子命名空间>)*\<类名>
  3. 完整的类名必须要有一个顶级命名空间,被称为 "vendor namespace";

  4. 完整的类名可以有一个或多个子命名空间;

  5. 完整的类名必须有一个最终的类名;

  6. 完整的类名中任意一部分中的下滑线都是没有特殊含义的;

  7. 完整的类名可以由任意大小写字母组成;

  8. 所有类名都必须是大小写敏感的。

  9. 当根据完整的类名载入相应的文件……

  10. 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须与至少一个“文件基目录”相对应;

  11. 紧接命名空间前缀后的子命名空间必须与相应的”文件基目录“相匹配,其中的命名空间分隔符将作为目录分隔符。

  12. 末尾的类名必须与对应的以 .php 为后缀的文件同名。

  13. 自动加载器(autoloader)的实现一定不能抛出异常、一定不能触发任一级别的错误信息以及不应该有返回值。

3. 例子

下表展示了符合规范完整类名、命名空间前缀和文件基目录所对应的文件路径。

完整类名 命名空间前缀 文件基目录 文件路径
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

实例:


下载地址:链接:https://pan.baidu.com/s/1skDAxVR 密码:9z23

PSR-4 规范实例讲解 -- php 自动加载的更多相关文章

  1. PSR-0 规范实例讲解 -- php 自动加载

    PSR-0规范 [1]命名空间必须与绝对路径一致 [2]类名首字母必须大写 [3]除去入口文件外,其他“.php”必须只有一个类 [4]php类文件必须自动载入,不采用include等 [5]单一入口 ...

  2. Laravel 执行流程(一)之自动加载

    定位 从 public/index.php 定位到 bootstrap/autoload.php 从 bootstrap/autoload.php 定位到 vendor/autoload.php 从 ...

  3. composer的自动加载机制(autoload)

    composer的出现真是让人们眼前一亮,web开发从此变成了一件很『好玩』的事情,开发一个CMS就像在搭积木,从packagist中取出『积木』搭建在自己的代码中,一点一点搭建出一个属于自己的王国. ...

  4. composer的autoload来自动加载自己编写的函数库与类库?

    1.使用命令composer init生成composer.json文件,并编辑autoload选项内容如下: 其中又包含主要的两个选项: files 和 psr-4. files就是需要compos ...

  5. 【PSR规范专题(5)】PSR-4 改进后的自动加载规范

    本文转自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 关键词 "必须"(&quo ...

  6. PHP 自动加载规范PSR-4

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  7. PHP设计模式:类自动载入、PSR-0规范、链式操作、11种面向对象设计模式实现和使用、OOP的基本原则和自动加载配置

    一.类自动载入 SPL函数 (standard php librarys) 类自动载入,尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_registe ...

  8. php中自动加载类_autoload()和spl_autoload_register()实例详解

    一._autoload 自动加载类:当我们实例化一个未定义的类时,就会触此函数.到了php7.1以后版本不支持此函数好像抛弃了 新建一个类文件名字自己随便去:news类在auto.php文件里面去实例 ...

  9. php自动加载规范 PSR4 (Thinkphp)

    PSR4是一种自动加载规范,老版本是PSR0,尽管thinkPHP支持PSR4和PSR0的自动加载方式,但是默认也是优先进行PSR4加载,如果失败,再进行PSR0的加载.本篇文章只会讨论PSR4的加载 ...

随机推荐

  1. STL queue用法

    先进先出 #include<iostream> #include<algorithm> #include<cstdio> #include<stack> ...

  2. Dubbo负载均衡与集群容错机制

    1  Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,D ...

  3. php使用gd库输出中文内容的图片

    正如标题所说那样,本文只讨论输出内容全部为中文或者包含中文的情况.如果内容全是字母或者其他字符的话,可以参考这篇博客:生成验证码 问题 此处要注意,标题中为什么要区别windows和linux分别实现 ...

  4. Drools 规则引擎

    Drools - Drools - Business Rules Management System (Java™, Open Source) http://drools.org/ [Drools]J ...

  5. 902. Kth Smallest Element in a BST

    Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. You ...

  6. Vagrant系列(二)----Vagrant的配置文件Vagrantfile详解

    一.简介 在我们的工作目录下有一个Vagrantfile文件,里面包含有大量的配置信息,通过它可以定义虚拟机的各种配置,如网络.内存.主机名等,主要包括三个方面的配置,虚拟机的配置.SSH配置.Vag ...

  7. MySqlHelper的封装

    其实MySqlHelper和SqlHelper是一样的,只是使用的驱动不一样而已. public class MySQLHelper { public static final String url ...

  8. oninput和onchange的区别

    菜鸟教程: oninput事件:HTML5标准事件 当用户向<input>中尝试输入时执行JavaScript: <input type="text" oninp ...

  9. 使用 idea 产生错误The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized

    解决方法 spring.datasource.url=jdbc:mysql://localhost:3306/spring_cache?serverTimezone=GMT%2B8

  10. 堆排序的Python实现

    参考: https://www.jianshu.com/p/d174f1862601