博客
关于我
php 标准规范
阅读量:793 次
发布时间:2023-02-28

本文共 1967 字,大约阅读时间需要 6 分钟。

PHP 标准推荐规范

PSR-0: 自动加载标准

PSR-0 已被 PSR-4 替代,以下是 PSR-4 的基本规范:

  • 命名空间格式

    命名空间必须以顶级命名空间(Vendor Name)开始,后面可以有多个子命名空间。
    格式为:

    \vendor\namespace\subnamespace\Class_Name
    • 命名空间和类名之间使用 DIRECTORY_SEPARATOR(默认为 \)。
    • 类名中的下划线 _ 只是作为命名字符,并无特殊意义。
  • 命名空间结构

    • 每个命名空间必须有一个顶级命名空间。
    • 子命名空间可以任意数量。
    • 文件系统中的命名空间分隔符会被转换为 DIRECTORY_SEPARATOR
  • 类名规范

    • 类名必须与对应的 .php 文件名称匹配,大小写敏感。
    • 命名空间前缀与文件路径必须一致。
  • 自动加载器要求

    • 自动加载器不能抛出异常、错误或返回值。
    • 必须确保类、文件等能够被正确加载。
  • PSR-4: 自动加载规范

    PSR-4 定义了完全限定类名的格式:

  • 类名格式

    \namespace\subnamespace\Class_Name
    • 必须包含顶级命名空间。
    • 子命名空间可以任意数量。
    • 类名必须是最终名称。
  • 命名空间结构要求

    • 命名空间前缀必须对应文件的基目录。
    • 子命名空间必须与相应的文件子目录匹配。
    • 命名空间分隔符作为目录分隔符。
  • 类名要求

    • 类名的大小写敏感。
    • 必须与对应的 .php 文件名称匹配。
  • 自动加载器要求

    • 必须支持 PSR-4 标准。
    • 必须确保无异常、错误或返回值。
  • PSR-4 示例
    完整类名 命名空间前缀 文件基目录 文件路径
    \Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php

    PSR-1: 基本编程规范

  • 文件标签

    使用 <?php<?= 作为标签。

  • 文件编码

    文件必须以 UTF-8 无 BOM 编码保存。

  • 文件内容

    • 只能包含定义、声明或副操作。
    • 命名空间和类必须遵守 PSR-0 或 PSR-4。
  • 命名规范

    • 类名:StudlyCase(首字母大写)。
    • 常量:所有字母大写,下划线分隔。
    • 方法名:camelCase(首字母小写)。
  • PSR-2: 编程风格规范

    PSR-2 已被 PSR-12 取代。

    PSR-12: 编程风格规范

  • 声明语句

    • 使用 use 导入语句。
    • 使用 declare(strict_types=1) 确保严格类型。
  • 代码格式

    • 行必须以 LF 结束。
    • 行不能超过 80 个字符(可软限制 120 个字符)。
    • 不允许尾随空格。
    • 缩进使用 4 个空格,无制表符。
  • 代码结构

    • 每行只能有一个语句。
    • 代码块之间用空行分隔。
    • 函数、方法参数后必须有空格。
  • 命名空间结构

    • 深度不得超过两个层级。
    • 使用 use 语句导入复合命名空间时,避免过深层级。
  • 示例
    declare(strict_types=1);
    namespace Vendor\Package;
    use Vendor\Package\{
    ClassA as A,
    ClassB,
    ClassC as C
    };
    use Vendor\Package\SomeNamespace\ClassD as D;
    use function Vendor\Package\{
    functionA,
    functionB,
    functionC
    };
    use const Vendor\Package\{
    ConstantA,
    ConstantB,
    ConstantC
    };
    class Foo extends Bar implements FooInterface
    {
    public function sampleFunction(int $a, int $b = null): array
    {
    if ($a === $b) {
    bar();
    } elseif ($a --> $b) {
    $foo->bar($arg1);
    } else {
    BazClass::bar($arg2, $arg3);
    }
    }
    final public static function bar()
    {
    // 方法体
    }
    }

    以上规范是编写高质量 PHP 代码的重要指南,建议在开发过程中遵循这些标准。

    转载地址:http://gwtfk.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
    查看>>
    opencv图像分割2-GMM
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenPPL PPQ量化(5):执行引擎 源码剖析
    查看>>
    Openresty框架入门详解
    查看>>
    OpenResty(2):OpenResty开发环境搭建
    查看>>
    openshift搭建Istio企业级实战
    查看>>
    Openstack(两控制节点+四计算节点)-1
    查看>>
    Openstack企业级云计算实战第二、三期培训即将开始
    查看>>
    OpenStack安装部署实战
    查看>>
    OpenStack的基本概念与架构详解
    查看>>
    Openstack的视频学习
    查看>>
    openstack虚拟机迁移live-migration中libvirt配置
    查看>>
    ORACEL学习--理解over()函数
    查看>>
    ORACLE Bug 4431215 引发的血案—原因分析篇
    查看>>
    oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
    查看>>
    Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
    查看>>