PSR-0 自动加载的标准结构 (虽然已不被推荐使用,但composer还在支持)

要点

  • 结构: \<Vendor Name>\(<Namespace>\)*<Class Name>

  • 第一层级的命名为开发人员的标识

  • 完整的命名空间可包含多个层级

  • 在加载文件的时候,命名空间的分隔符\会被DIRECTORY_SEPARATOR替换

  • 类名中的_会被DIRECTORY_SEPARATOR替换,所以_无任何意义

  • 在加载文件的时候,命名空间会补全.php后缀

  • 命名空间及类命名可以大小写随意

  • 示例:

    \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php

    \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

    • 需要注意的是,层级目录会重复vendor和namespace。

加载器的实现示例

或者 中
  • 编码 (Encoding)

必须使用带BOM的UTF-8

  • 对象化 (Objective)

单个PHP文件只负责一件事。定义类、trait、function、常量或者执行一系列的动作。不应该同时包含定义和执行代码。

  • 自动加载 (Autoloading)

命名空间和类必须支持PSR-4标准。

  • 类名 (Class names)

使用驼峰格式,首字母大写。例:CoffeeBean、TitleCase。

  • 常量名 (Constant names)

必须全大写,并以下划线切分单词。例:PROJECT_NAME。

  • 方法命名 (Method names)

使用驼峰格式,首字母小写。例:testCode。

PSR-2 严格代码样式

  • 包含PSR-1中的所有要求

  • 首行缩进 (Indentation)

使用4个空格 (鄙人也是这个阵营的)

  • 文件和行 (Files and lines)

PHP文件必须使用Unix格式的换行结尾,最后必须多一个空行。必须省略"?>“结尾标签。

单行字符最好不超过80,最多不能大于120.

每行最后不能有多余的空格。

  • PHP关键词 (Keywords)

所有PHP的关键词使用小写。truefalsenull等。

  • 命名空间 (Namespaces)

每个命名空间的声明必须跟着一空行。同理在使用use关键词的时候后边也需要跟一空行。

isAwake() === true) { do { $gorilla->beatChest(); } while($ibis->isAsleep() === true); $ibis->flyAway(); } ### PSR-3 日志接口 * PSR-1和PSR-2是编码规范, PSR-3是接口定义,它定义了PHP的日志组件的一系列接口信息。 * 一个PHP的日志组件应该实现了`Psr\Log\LoggerInterface`接口的所有方法。该接口的定义参照了系统日志协议RFC5424。具体内容可参照: [LoggerInterface.php](https://github.com/php-fig/log/blob/master/Psr/Log/LoggerInterface.php)定义。 ### PSR-4 自动加载器 * 同PSR-0,该标准描述了如何在运行时定位及加载PHP的类、接口以及traits。可以成为PSR-0的简化升级版。移除了对`_`转换成`DIRECTORY_SEPARATOR`的支持,目录结构也不需要再在`src/`下重复vendor和namespace。 * 比如`\Oreilly\ModernPHP`这个命名空间对应的物理地址`src/`。PHP就知道所有使用了这个命名空间的类、接口以及traits都在`src/`目录下边。而命名空间`\Oreilly\ModernPHP\Chapter1\`对应的物理文件应该是`src/Chapter1/`。 _本文档参考了《O'Reilly Modern PHP》以及PHP官方文档_