时间:2022-11-03 07:25:07 | 浏览:13
PHP 7.4 是下一个 PHP 7 的次要版本,预计将于 2019 年 11 月 28 日发布到 General Availability。让我们来了解下 PHP 7.4 新增的功能,这将使 PHP 更快,更可靠。
当然,更令我期待是 PHP 8。因为 JIT 的一些提议,已经获得批准,这可能成为 PHP 的又一个里程碑。
使用 PHP 7.4 的 PHP 有什么新功能?
● 支持数组内解包 - 数组扩展运算符
● 箭头函数 2.0 (更加简短的闭包)
PHP 7.4 在数组表达式中引入 Spread 运算符
自 PHP 5.6 起可用,参数解包是将数组和 Traversable 解包为参数列表的语法。要解压一个数组或 Traversable,必须以 ...(3 点)为前缀,如下例所示:
function test(...$args) { var_dump($args); }
test(1, 2, 3);
然而 PHP 7.4 RFC 建议将此功能扩展到数组中去定义:
$arr = [...$args];
Spread 运算符的第一个好处就是性能,RPC 文档指出:
Spread 运算符应该比 array_merge 拥有更好的性能。这不仅仅是 Spread 运算符是一个语法结构,而 array_merge 是一个方法。还是在编译时,优化了高效率的常量数组
Spread 运算符的一个显着优点是它支持任何可遍历的对象,而该 array_merge 函数仅支持数组。
以下是数组中参数带有 Spread 运算符的示例:
$parts = ["apple", "pear"];
$fruits = ["banana", "orange", ...$parts, "watermelon"];
var_dump($fruits);
如果在 PHP 7.3 或更早版本中运行此代码,PHP 会抛出一个 Parse 错误:
Parse error: syntax error, unexpected "..." (T_ELLIPSIS), expecting "]" in /app/spread-operator.php on line 3
相反,PHP 7.4 将返回一个数组
array(5) {
[0]=>
string(6) "banana"
[1]=>
string(6) "orange"
[2]=>
string(5) "apple"
[3]=>
string(4) "pear"
[4]=>
string(10) "watermelon"
}
RFC 声明我们可以多次扩展同一个数组。此外,我们可以在数组中的任何位置使用 Spread Operator 语法,因为可以在 spread 运算符之前或之后添加常规元素。因此,以下代码将按预期工作:
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
也可以将函数返回的数组作为参数,放到新数组中:
function buildArray(){
return ["red", "green", "blue"];
}
$arr1 = [...buildArray(), "pink", "violet", "yellow"];
PHP 7.4 输出以下数组:
array(6) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
[2]=>
string(4) "blue"
[3]=>
string(4) "pink"
[4]=>
string(6) "violet"
[5]=>
string(6) "yellow"
}
我们也可以使用生成器:
function generator() {
for ($i = 3; $i <= 5; $i++) {
yield $i;
}
}
$arr1 = [0, 1, 2, ...generator()];
但不允许通过引用传递的方式。请考虑以下示例:
$arr1 = ["red", "green", "blue"];
$arr2 = [...&$arr1];
如果我们尝试通过传递引用的方式,PHP 会抛出以下 Parse 错误:
Parse error: syntax error, unexpected "&" in /app/spread-operator.php on line 3
如果第一个数组的元素是通过引用存储的,那么它们也通过引用存储在第二个数组中。这是一个例子:
$arr0 = "red";
$arr1 = [&$arr0, "green", "blue"];
$arr2 = ["white", ...$arr1, "black"];
这是我们用 PHP 7.4 获得的:
array(5) {
[0]=>
string(5) "white"
[1]=>
&string(3) "red"
[2]=>
string(5) "green"
[3]=>
string(4) "blue"
[4]=>
string(5) "black"
}
箭头函数 2.0 (简短闭包)
在 PHP 中,匿名函数被认为是非常冗长且难以实现和难以维护的,RFC 建议引入更简单,更清晰的箭头函数(或简短闭包)语法,这样我们就可以简洁地编写代码。
在 PHP 7.4 以前:
function cube($n){
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map("cube", $a);
print_r($b);
PHP 7.4 允许使用更简洁的语法,上面的函数可以重写如下:
$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);
目前,由于语言结构,匿名函数(闭包)可以使用 use 继承父作用域中定义的变量,如下所示:
$factor = 10;
$calc = function($num) use($factor){
return $num * $factor;
};
但是在 PHP 7.4 中,父级作用域的值是通过隐式捕获的(隐式按值的作用域进行绑定)。所以我们可以用一行来完成一下这个函数:
$factor = 10;
$calc = fn($num) => $num * $factor;
父级作用域定义的变量可以用于箭头函数,它跟我们使用 use 是等价的,并且不可能被父级所修改。
新语法是对语言的一个很大改进,因为它允许我们构建更易读和可维护的代码。
NULL 合并运算符
由于日常使用中存在大量同时使用三元表达式和 isset () 的情况, 我们添加了 null 合并运算符 (??) 这个语法糖。如果变量存在且值不为 NULL, 它就会返回自身的值,否则返回它的第二个操作数。
$username = $_GET["user"] ?? ‘nobody";
这段代码的作用非常简单:它获取请求参数并设置默认值(如果它不存在)。但是在 RFC 这个例子中,如果我们有更长的变量名称呢?
$this->request->data["comments"]["user_id"] = $this->request->data["comments"]["user_id"] ?? "value";
长远来看,这段代码可能难以维护。因此,旨在帮助开发人员编写更直观的代码,这个 RFC 建议引入 null 合并等于运算符 (
null_coalesce_equal_operator)??=,所以我们可以敲下面这段代码来替代上面的这段代码:
$this->request->data["comments"]["user_id"] ??= ‘value’;
如果左侧参数的值为 null,则使用右侧参数的值。
作者 | Beau Beauchamp 译者 | 弯月出品 | CSDN(ID:CSDNnews)在流行文化的冲击下,也许很多人都不赞同本文表达的观点,但我毅然决定再一次逆流而上。我认为,虽然 PHP 百般受轻视,但这门编程语言的流行度比以
晓查 乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI当下,如果你打开搜索引擎,搜索关键词“PHP过时”,能找到714万个相关结果。这些结果之中,不乏有2016年、2018年的结果,说PHP已经过时了。现已2019年,这个曾经自称
PHP 是最流行的 Web 服务端编程语言,并且在 2019 年仍然很火。因此,我们将在这里盘点 2019 年七个最好的 PHP 框架。这里讨论的 PHP 框架主要用于工程实践,通常用于构建复杂、安全和可扩展的 Web 应用程序。在讨论最好
PHP 是服务器端脚本语言。您应当具备的基础知识在继续学习之前,您需要对以下知识有基本的了解:HTMLCSS如果您希望首先学习这些项目,请在我们的 首页 访问这些教程。PHP 是什么?PHP(全称:PHP:Hypertext Preproc
出品|开源中国文|御坂弟弟PHP 8.1.0 现已发布,该版本带来了许多改进和新功能。枚举使用枚举而不是一组常量并立即进行验证。只读属性只读属性不能在初始化后更改,比如,在为它们分配值后。它们可以用于对值对象和数据传输对象建模。First-
TIOBE 公布了 2021 年 11 月的编程语言排行榜。自 20 多年前 TIOBE 指数开始发布以来,PHP 一直常驻在榜单前十;然而最近,该语言已经开始在前十的边缘苦苦挣扎。TIOBE CEO Paul Jansen 称,“PHP
我已有将近二十年的编程经验,并使用过各种编程语言进行开发。在我以前做过的很多工作和现在正在做的这份工作中,我非常高兴能够将 PHP 作为核心编程语言。从第一次使用 PHP 工作开始,我就听到了关于 PHP 的各种抱怨,但与此同时我也看到了
PHP现在名声很糟糕,因为它曾经是“可怕”的。本文试着回答一些常见的关于 PHP 的断言,目的是向非技术人员解释,PHP 并不像许多人所说的那么糟糕。它是不是鼓励糟糕的实践?不再是了。过去,许多开发者被书本教授非常糟糕的实践,因此 PHP
犹记得,据 2001 年 7 月的 PHP 官方文档描述,“PHP 是有史以来最好的语言,没有之一。它快速,非常强大,而且免费。"不过,随着时间的迭代,不少开发者发现所谓世界上最好的语言 PHP,虽然能极大地提升性能,但是其功能不够完善最终
最近,我突然发现自己好像又在逆潮流而动。可能我的想法与很多朋友不同,我认为 PHP 这个编程语言界的“混蛋”比以往任何时候都更受欢迎。或许你会质疑——PHP 不是已经完蛋了吗?市面上已经出现了很多“更好”的编程语言,不是吗?答案显然是否定的