php diy,PHP DIY 系列------基础篇:1. PSR

PHP DIY系列–一起手写一个api框架

创作初衷

有没有用烦了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条。

24d0b9d12935b2ed13fcc134db5b5609.png

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

PSR-1 基础编码规范

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

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

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

命名空间以及类必须符合 PSR 的自动加载规范PSR-4

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

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

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

PSR-12 代码风格规范

PSR-12的规范很细致,包含了声明、命名空间、类及继承以及控制结构等说明。

我们先来看一个demo:

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()

{

// method body

}

}

代码 必须 遵循 [PSR-1] 中的编码规范

所有PHP文件必须使用Unix LF (linefeed)作为行的结束符;

所有PHP文件必须以一个空白行作为结束;

纯PHP代码文件必须省略最后的 ?> 结束标签

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

空行可以使得阅读代码更加方便以及有助于代码的分块。

每行一定不能存在多于一条语句

代码必须使用4个空格符的缩进,一定不能用 tab键

PHP所有关键字必须全部小写

控制结构的基本规范如下:控制结构关键词后必须有一个空格。

左括号 ( 后一定不能有空格。

右括号 ) 前也一定不能有空格。

右括号 ) 与开始花括号 { 间一定有一个空格。

结构体主体一定要有一次缩进。

结束花括号 } 一定在结构体主体后单独成行。代码风格规范内容很多,这里就不一一说明了,大家可自行阅读

PSR-4 自动加载

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

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

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

\(\)*\完整的类名必须要有一个顶级命名空间,被称为 “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组织的初衷所说,他们建立的规范不是限制大家的编码自由,只是寻找共性,为了我们一起更好的协同工作。

本作品采用《CC 协议》,转载必须注明作者和本文链接

收藏前不妨点个赞试试!!!

分享开发知识,欢迎交流。qq交流群:965666112,公众号:程序员涛子

Q定制云印刷在线DIY定制系统是一个以php+MySQL进行开发的在线DIY定制系统。 系统基本功能: 1、会员管理,包括会员组管理,不同的组有不同的权限  2、管理员管理,可以对不同的管理员设置不同的权限 3、订单管理,包括订单的日常处理  4、产品管理,添加,修改等  5、支付方式管理 6、配送方式管理 7、优惠券及充值卡管理  8、会员相册及相片管理 9、会员设计产品管理  10、前台定制参数管理,对前台定制模块字体设置,既可以使用系统字体也可以自定义字体  11、包装管理  12、促销管理  15、其他功能,站内消息,产品评论等等  本软件的特色: 支持各类产品的在线定制,无论是水杯雨伞U盘还是T恤衬衫四件套,均可轻松进行定制 独创制作间概念,同一套模板可以重复对应不同制作间 手机、PC端实时互通,客户可通过任意途径进行图片上传、编辑,一方修改另一方即时可见 可视化操作,支持随时预览定制效果 新增背景模型遮罩,完美匹配不同形状商品 实时3D预览,所见即所得 模板上传支持PSD格式一键上传,一个PSD文件为一页,多个PSD文件组成一个模板的多页,无需辛苦分层单张上传,大大提高制作模板的效率 后台可以直接提取分辨率高达300的效果图直接用于产品加工 全站DIV+css 布局,关键词等相关设计都从seo角度考虑 全站采用缓存技术,大大提高了网站的速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值