搜索
首页后端开发php教程手写PHP API框架(一)之PSR规范

手写PHP API框架(一)之PSR规范

Feb 10, 2023 am 10:31 AM
php编码规范

本篇文章给大家带来了关于php的相关知识,其中主要跟大家聊一聊编码规范,也建议大家在开发中尽量遵循规范,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

创作初衷

  • 有没有用烦了CURD?
  • 各种框架是不是有点头大?
  • 有没有尝试自己设计一个框架?
  • 学了PHP语法,没有项目去实战,夯实基础

希望能帮助能让你快速地搭建一个自己的框架,能给你的工作或者学习中带来一定的帮助与启发。

你能学到什么

  • PSR规范

  • composer的使用

  • 快速搭建一个API接口框架

  • Redis各种数据类型的应用

  • 缓存应用分析


在开发框架之前,我来介绍框架开发遵循的规范。

大多数编程语言都有自己的一套编码规范,作为“世界上最好的语言”,PHP当然也有自己的编码规范。这个规范就是PHP Standard Recommendation(简称PSR)。

当然,从我自己的工作中,我发现很多PHP程序员尤其是初级程序员,是不知道PHP是有这么一个规范的,我认为这是不科学的。

什么是PSR?

介绍PSR之前需要介绍一下制定此规范的组织-----PHP-FIG,全称是PHP Framework Interoperability。

组织成员制定规范,并且落实在自己的项目中,虽然不是官方组织,但也代表了大部分PHP社区项目,如CakePHP,Composer,Drupal,PEAR,Slim,Yii framework,Zend Framework等。并且有越来越多的项目加入并遵循此标准。

PSR项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,让工程师一起更好协同工作。

截止目前,已经官网已有20条列出,除去起草中和舍弃的,有以下13条。

PSRs


我们不妨来看看这些规范:

PSR-1 基础编码规范

  • PHP 代码文件必须以 f6b8173e43939682db4175819bc162ae 结束标签
  • 每行的字符数 应该软性保持在 80 个之内,理论上 一定不可 多于 120 个,但一定不可有硬性限制;非空行后一定不能有多余的空格符;
  • 空行可以使得阅读代码更加方便以及有助于代码的分块。
  • 每行一定不能存在多于一条语句
  • 代码必须使用4个空格符的缩进,一定不能用 tab键
  • PHP所有关键字必须全部小写
  • 控制结构的基本规范如下:
控制结构关键词后必须有一个空格。
左括号 ( 后一定不能有空格。
右括号 ) 前也一定不能有空格。
右括号 ) 与开始花括号 { 间一定有一个空格。
结构体主体一定要有一次缩进。
结束花括号 } 一定在结构体主体后单独成行。复制代码

代码风格规范内容很多,这里就不一一说明了,大家可自行阅读

PSR-4 自动加载

关于由文件路径 自动载入 对应类的相关规范, 本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外, 本 PSR 还包括自动载入的类对应的文件存放路径规范。

  • 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其它类似结构。

  • 一个完整的类名需具有以下结构:

     \5de72c06ebbc3e2941f816b144884e0f(\62dd555a0fb7e11d8719306e139a32e9)*\9f92f7e78eacb2684f956ddec8c620be
    • 完整的类名必须要有一个顶级命名空间,被称为 "vendor namespace";

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

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

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

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

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

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

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

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

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

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

例子

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

完整类名 命名空间前缀 文件基目录 文件路径
\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

暂且只介绍这比较常用的三个规范。

更多最新规范建议点击查看


本节主要介绍了PHP的编码规范PSR,建议大家在开发中尽量遵循此规范,特别是团队开发的时候,我们不应该各自有着各自的编码风格,应该尽可能统一风格。正如PHP-FIG组织的初衷所说,他们建立的规范不是限制大家的编码自由,只是寻找共性,为了我们一起更好的协同工作。

推荐学习:《PHP视频教程

以上是手写PHP API框架(一)之PSR规范的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:juejin。如有侵权,请联系admin@php.cn删除
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具