《Modern PHP》

PHP也是一门在不断变化的语言。

本书介绍了PHP 5.3之后出现的一些新特性,对PSR标准做了介绍,但是因为年代(2015年出版)的问题,PSR标准建议到官网进行阅读,本书最后还对配置、部署方面提出了一些建议。

新特性

5.3之后的PHP引入了很多有趣的新特性。

1.命名空间在PHP5.3被引入,使用反斜杠\作为分隔符,通过类似文件目录层级的形式组织PHP代码,主要实现了两大特性:类名字的唯一性,更接近与文件系统的自动加载规则(相比起之前通过_作为目录分隔符的编码方式)。

2.作者推崇PHP编程也要面向接口编程。面向接口让代码更为灵活,一次约定,任意遵循约定的实现皆可使用。

3.Traits从单词词义上为特征,实际效果即可复用的代码块(类似mixins),在PHP5.4被引入。Traits让没有关系的两个类实现了代码复用。Traits和类很相似,但是并不能实例化。

4.Generators在PHP5.5中被引入,为低成本的操作大数据集提供了可能性,一个常用的应用场景,如逐行读取大文件,在每次读取一个文件时,唤醒上下文,读取部分文件记录,可以降低处理过程中的内存占用。yield只能在函数中使用,返回一个Generators对象。生成器是不可回溯的(只能不断地向前推进到下一个返回值,虽然提供了rewind()方法)。关于Generator有一篇有趣的文章

5.闭包Closures在PHP5.3被引入,即匿名函数。匿名函数两个有意思的特性,一个是增加属性值,即通过use关键字提供附加参数,一个是通过bindTo()方法传入作用域,其中bindTo()方法的第二个参数需要指定操作的类名称,否则无法让闭包置身于设定了的上下文之中。

6.内置的HTTP Server,在PHP5.4之后,还有什么比php -S ip:port更直接迅速的启动一个HTTP Server来测试你的API呢?

其他

1.PSR(PHP Standards Recommendation)为了解决框架的互操作性,指定了一些关于接口、自动加载还有代码风格的推荐标准,除了书中提到的PSR0-4标准,目前已经存在的标准有:

编号 标准
1 Basic Coding Standard
2 Coding Style Guide
3 Logger Interface
4 Autoloading Standard
6 Caching Interface
7 HTTP Message Interface
11 Container Interface
13 Hypermedia Links
16 Simple Cache

按照PSR标准编写的类库,可以较大程度上的与其他项目协同工作。当中最重要的,个人觉得应为PSR4与PSR7标准,一个统一了加载方式,一个确定了操作PHP API的方法。

2.对于PSR4,只需要记住一行代码就可以了:

1
require $base_dir . str_replace('\\', '/', str_replace($class_prefix, '', $class_name)) . php

即类文件目录为将命名空间前缀替换为实际代码的起始目录,并将命名空间的反斜杠替换成目录分隔符即可。

3.想要创建自己的组件,可以参考https://github.com/thephpleague/skeleton。简单来说,在src目录中放置自身的代码,在tests目录中存放测试用例,通过composer.json文件声明名称、依赖、自动加载器等组件信息。

当然了,作为PHPer,是时候读读PHP The Right Way了。