PHP8 改进挺大的. 还能这样写代码.
use function demo\strlen;
直接可以重写原生函数, 这样就可以更好的注入或者增加功能, 比如某些函数避免它报错, 或者别名利用.
var_dump(value: 'str');
error_reporting(error_level: 1);
类型参数命名, 这让写代码更具观赏性, 更不容易乱了.
array_column(column_key: 1,array: []);
base64_decode(strict: true, string: 'string');
参数命名后, 参数顺序开始可以随意了,
这样也给各大框架增加了工作难度, 基本上全部要重建.
array_column
和use function
支持于 5.6Named Arguments
支持于 8.0没活儿咬个打火机
这玩意太鸡肋了把,甚至还有负面影响,代码可读性都变差
命名参数的更多应用场景其实是在默认参数比较多的函数(方法)上,不过一般来说不推荐编写超过 3 个参数的方法,改而定义单独的类来处理比较合适(因为参数多了,大概率就说明这个函数内部会变得比较复杂了。)
use function
这个其实,如果你真想调用原始方法,直接在方法名前面加个反斜线,就行\strlen('Hi')
,就会调用系统的了,而且如果你十分确定你要调用的就是系统函数,这样的还会比不加反斜线快一丢丢。要覆写系统函数还是挺麻烦的,有些扩展带来的函数倒是可以停用扩展后写,而有些内建的就不行了,只有利用一些扩展来实现,比如 runkit.
其实 PHP 8.x 有用的改动也挺多的,除了上面的命名参数,比如:枚举、构造函数属性提升、First class callable syntax、注解、更强大的类型(交叉、联合)、match 表达式、Nullsafe 运算符、新的初始化器(默认参数)、数组解包的升级、析取范式 (DNF)、常量的升级(trait、接口可用)、属性钩子、属性的非对称可见性、ext-dom 的 HTML5 升级、BCMATH 的对象化升级、
new MyClass()->method() 不需要括号
等。