时间:2019-08-05 12:00:15 作者:johnnyl 浏览量:41
开发者:PHP不再是十年前那一门糟糕的言语!图3
每月包被安装数
开发者:PHP不再是十年前那一门糟糕的言语!图4
PHP 在不断开展,曩昔几年中添加了许多新特性
尽管 async 与 await 这两个呼声极高的特性还没有完成,可是 PHP 这几年新特性不断出现,言语本身得到了各方面的改善。
下边列出了一些重视度比较高的 PHP 新特性:
Short closures
短闭包,也称为箭头函数,这是一种在 PHP 中编写较短函数的办法。将闭包传递给 array_map 或 array_filter 等函数时,它能够发挥极大的效果。
// A collection of Post objects $posts = [/* … */];$ids = array_map(fn($post) => $post->id,$posts);
Null coalescing operator
空合并运算符,它类似于三元运算符,但左面的操作数行为类似于 isset,而不是仅运用其布尔值。这使得此运算符对数组特别有用。它同时可在未设置变量时分配默认值。
$undefined ?\'fallback\'; //\'fallback\'$unassigned;$unassigned ?\'fallback\'; //\'fallback\'$assigned = \'foo\';$assigned ?\'fallback\'; //\'foo\'\'\' ?\'fallback\'; //\'\'\'foo\' ?\'fallback\'; //\'foo\'\'0\' ?\'fallback\'; //\'0\'0 ?\'fallback\'; //0false ?\'fallback\'; //false
Traits
Trait 是一种重用代码的机制,它能够减少单承继的某些限制。Traits 与类组合的语义界说了降低复杂性的方式,并防止了与多重承继和 Mixins 相关的典型问题。
Trait 类似于类,但仅用于以细粒度和一致的方式对函数进行分组,它是对传统承继的弥补,能够完成行为的横向组合,类成员运用不需求承继。
Typed properties
属性类型化,类变量能够界说类型,比方:
classA{publicstring$name;publicFoo$foo;}
Spread operator
扩展运算符,这是一种新语法,能够直接在调用中解压缩参数,比方:
call_user_func_array([$db,\'query\'],array_merge(array($query),$params));
直接用新语法可扩展出数组 $params:
$db->query($query,...$params);
JIT compiler:PHP 8 承认支持 JIT
JIT 是一种编译器策略,它将代码表述为一种中心状态,在运行时将其转化为依赖于体系结构的机器码,并即时履行。在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中心表述,并以依赖于体系结构的机器码履行,也就是说保管代码的不再是 Zend VM,而是更为底层的 CPU。
FFI
Foreign Function Interface,外部函数接口,它允许从纯脚本言语调用 C 函数、运用 C 数据类型,从而更有效地开发“体系代码”。对于 PHP,FFI 开辟了一种运用纯 PHP 编写 PHP 扩展和绑定到 C 库的办法。
Anonymous classes
匿名类,用于创立简略的一次性对象:
setLogger(newLogger());//PHP7+code$util->setLogger(newclass{publicfunctionlog($msg){echo $msg;}});
Return type declarations
声明回来类型:
严厉形式:
Contemporary cryptography
使 Libsodium 成为中心扩展,Libsodium 是一个现代加密库,由安全专家精心选择的加密算法组成,以防止侧信道缝隙。
Generators
生成器,供给了一种简略、无样板完成迭代器的办法。
各种开发工具在曩昔几年中现已老练,而且坚持增加
最后一部分,作者剖析了当时 PHP 开发工具也在不断老练,而且坚持增加。
他以静态剖析器为例,比方 Psalm、Phan 与 PHPStan,这些工具将静态剖析 PHP 代码并陈述任何类型错误与或许存在的 bug。在某种程度上,它们供给的功能能够与 TypeScript 的相媲美,可是因为 PHP 现在不供给转化(transpile),所以不允许运用自界说语法。这意味着 PHP 开发需求依赖文档,但其实 PHP 的创造者 Rasmus Lerdorf 从前说到了向中心添加静态剖析引擎的主意。