PHP 7.4对您意味着什么?
PHP不断发展,他们刚刚发布了最新的PHP 7.4更新,其中充满了新功能。 正如我们在过去的PHP 7版本中已经证明的那样-性能和速度不断提高。 最令人兴奋的新功能之一是
预加载 。 由于简化了常见的代码行,因此可以加快脚本执行速度,并引入了拥有更快,更干净的代码的功能。
PHP负责人充分考虑了听众的意见和要求,并完美地回答了他们。 从那以后,他们一直在不断更改代码,以便在编程语言之间切换时更直观,更舒适。
PHP在所有网站中的78.9%以上使用。 据
W3techs称 ,使用PHP的最受欢迎的网站是Wikipedia,Pinterest和Facebook,仅举几例。
如果我们明确地查看运行PHP的WordPress网站,将PHP 5和7进行比较,就会发现速度提高了一倍。 WordPress驱动的网站通过使用最新的PHP版本获得最大收益。

该图说明了有关积极使用PHP的网站的真相。 是
4000万。 实时网站足以吸引您的注意力? 现在有多少人在使用PHP。 此外,PHP 7.4与PHP 7.3相比已经具有更好的测试结果,并具有改进的性能和其他生活质量升级。
下图显示了新旧PHP版本的总体
基准测试 。 测试的一些标准包括易用性,速度和性能。

PHP 7.4的新增功能?
自2016年以来,PHP7一直在不间断地发布年度更新。 每年,他们提供新功能,新增功能,并编写更简洁的代码,从而使该语言对于在其网站上运行的用户来说更加可靠和用户友好。
让我们深入研究一下PHP 7.4的新增功能所做的一些更改。 有关完整列表,请
在此处查看他们的变更日志。
预装
让我们谈谈代码。 使用框架或库时,必须在每次请求时加载并链接其文件。 预加载是指可以将框架和库加载到OPCache中的时间。 它允许服务器在启动过程中加载PHP文件并将其存储在内存中,并使它们可用于将来的任何请求。 谈论让事情进展迅速!
预加载由特定的
php.ini指令运行:
opcache.preload 。 它具有PHP脚本编译器,并在服务器启动时执行。 它也可以用于预加载更多文件并选择包含或编译它们。
太棒了 但是,如果曾经更改过预加载文件的源,则必须重新启动服务器。 预加载的文件也永远保留在OPCache内存中。
但是,如果您需要再次使用它们,这些预加载的文件将继续可用于将来的任何请求。
数组表达式中的扩散运算符
早在发布PHP 5.6时,PHP就开始支持参数解包(扩展运算符),但是现在,在7.4中,我们可以将此功能与数组表达式一起使用。 参数解压缩是一种将数组和Traversables解压缩到参数列表中的语法。 而且,要这样做,只需要在前面加上...(3个点)即可。
让我们来看这个例子:
$animals = ['dog', 'cat']; $animalkingdom = ['lion', 'elephant', ...$animals, 'giraffe'];
现在,我们可以简单地使用Spread Operator语法从任意数组中的任意位置扩展数组。
这是一个更长的例子:
$num1 = [1, 2, 3]; $num2 = [...$num1];
不仅如此,您还可以在函数中使用它。 看看这个例子:
function getNum() { return ['a', 'b']; } $num6 = [...getNum(), 'c'];
此外,您现在可以将函数直接返回的数组和生成器解压缩到新数组中。
一个代码示例如下所示:
function getAnimals(){ return ['dog', 'cat', 'elephant']; } $num1 = [...getAnimals(), 'lion', 'tiger', 'giraffe'];
在PHP 7.4中,它将显示:
array(6) { [0]=> string(3) "dog" [1]=> string(3) "cat" [2]=> string(8) "elephant" [3]=> string(4) "lion" [4]=> string(5) "tiger" [5]=> string(7) "giraffe" }
使用这个新的数组表达式,散布运算符应该比7.3 array_merge具有更好的性能。 这是因为传播运算符是一种语言结构,而array_merge是一个函数。 同样因为散布运算符支持实现可遍历的对象,而array_merge仅支持数组。
需要注意的一些重要事项,由于不支持字符串键,因此只能使用索引数组。 如果使用此键,一旦找到字符串键,就会在屏幕上引发可恢复的错误。
7.4的另一项荣耀是删除了array_merge。 告别可怕的索引移位!
例如,让我们在下面看这个冗长的数组合并:
$array = ['banana, 'orange']; $array[2] = 'orange'; $array[1] = 'apple'; //shifting var_dump($array); // prints array(3) { [0]=> string(6) "banana" [1]=> string(5) "apple" [2]=> string(6) "orange"
7.4的另一个好处是使用了generator函数。 生成器函数的工作方式与普通函数类似,只是
生成器函数不返回值,而是
生成所需数量的值。
查看以下示例代码:
function generator() { for ($i = 3; $i <= 5; $i++) { yield $i; } } $num1 = [0, 1, 2, ...generator()];
参考不足
现在,PHP 7.4具有WeakReference类,请勿将其与类
WeakRed或
Weakref扩展混淆。
WeakReferences使程序员可以调用对对象的引用。 这很有用,因为它不会阻止对象被破坏。 它们对于实现类似缓存的结构很有帮助。
WeakReference { public __construct ( void ) public static create ( object $referent ) : WeakReference public get ( void ) : ?object }
协变参数和协变返回
当前,PHP主要使用不变的参数类型和返回类型。 这意味着,如果方法的参数或返回类型为X,则子类型参数或返回类型也必须为
X。现在,在PHP 7.4中,它建议在参数和返回类型上允许
协变 (从特定到通用的顺序)和
逆变 (颠倒顺序)。
这是两个示例:
协变返回类型示例:
interface Factory { function make(): object; } class UserFactory implements Factory { function make(): User; }
变量参数类型示例:
interface Concatable { function concat(Iterator $input); } class Collection implements Concatable {
键入属性2.0
从PHP 5开始,类型提示已成为一项可用功能,允许您指定预期传递给函数或类的变量的类型。 在PHP 7.2迁移中,对象数据类型的添加使人们希望将来会有更多可用。 未来就是现在。
在新的7.4中,PHP能够支持以下类型列表:
bool, int, float, string, array, object, iterable, self, parent any class or interface name ?type // where "type" may be any of the above
请注意,
父类型可以在类中使用,并且不必具有与参数和返回类型一致的父类型。
另外,请注意,不支持
void和
callable 。
Void被删除,因为它没有用并且语义不明确;
可调用 ,因为它的行为与上下文有关。
让我们看看更多示例。
这是为PHP 7.3编写的类:
class User { private $id; private $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } public function getId(): int { return $this->id; } public function setId(int $id): void { $this->id = $id; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } }
在PHP 7.4中,在不牺牲任何类型安全性的情况下,现在可以编写一个简单的类,如下所示:
class User { public int $id; public string $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } }
以下是7.4现在支持的所有类型的一些示例:
class Example { public int $scalarType; protected ClassName $classType; private ?ClassName $nullableClassType;
箭头功能2.0
PHP中的匿名函数往往冗长冗长,即使它们仅执行简单的操作也是如此。 这部分归因于大量的语法模板,部分归因于需要手动导入使用的变量。
这使得使用简单闭包的代码难以阅读甚至难以理解。
让我们看一下您将在PHP 7.3中使用的一些代码:
function array_values_from_keys($arr, $keys) { return array_map(function ($x) use ($arr) { return $arr[$x]; }, $keys); }
现在,这是PHP 7.4的更简洁语法:
function array_values_from_keys($arr, $keys) { return array_map(fn($x) => $arr[$x], $keys); }
因此,箭头函数现在具有以下简单形式:
fn(parameter_list) => expr
在下面,您可以并排看到两个函数$ fn1(7.3)和$ fn2(7.4)的示例。 它们具有相同的结果,但外观不同:
$y = 1; $fn1 = fn($x) => $x + $y; $fn2 = function ($x) use ($y) { return $x + $y; };
如果箭头函数嵌套,这也将起作用:
$z = 1; $fn = fn($x) => fn($y) => $x * $y + $z;
在此,外部函数捕获
$ z 。 然后,内部函数还从外部函数捕获$ z。 在7.4中,外部作用域可以在内部函数中使用。 这是7.3无法做到的。
箭头函数语法允许使用各种函数,例如variadics,默认值,参数和返回类型,以及按引用传递和返回。 同时保持整洁,可读的外观。 以下是所有可用的有效箭头功能:
fn(array $x) => $x; fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest;
要注意的一件事是箭头函数的优先级最低。 参见示例:
fn($x) => $x + $y
弃用
与7.4合并时发生了许多弃用情况。 以下列表是针对不推荐使用的功能的简短概述。 您可以
在这里找到更详细的说明:
- 实型
- 魔术报价遗留
- array_key_exists()与对象
- FILTER_SANITIZE_MAGIC_QUOTES过滤器
- 反射export()方法
- mb_strrpos() ,编码为第三个参数
- implode()参数顺序混合
- 从非静态闭包中解除此$的绑定
- hebrevc()函数
- convert_cyr_string()函数
- money_format()函数
- ezmlm_hash()函数
- r estore_include_path()函数
- allow_url_include ini指令
以下是两步弃用,需要注意的一些重要事项。
更改串联运算符的优先级
当前,“。”,“ +”和“-”运算符的优先级都相等。 这些运算符的任何组合都将简单地从左到右求解。
让我们看看PHP 7.3中的以下代码:
echo "sum: " . $a + $b;
在PHP 7.4中,“ +”和“-”将优先于“。”。 因此加法和减法将始终在字符串之前执行。 如下所示:
echo "sum: " . $a + $b;
这个分两步的提案旨在减少出错的可能性,提高直觉。 当前,PHP 7.4处于第一阶段,已弃用了非括号的表达式“ +”,“-”和“”。 在等待最终投票/ PHP 8中发生的更改时。
左联想三元运算符
与大多数其他语言不同,PHP中的三元运算符是左关联的,而不是右关联的。 这不仅不常见,而且在不同语言之间切换的程序员也感到困惑。 PHP 7.4建议删除左关联性,而要求使用括号。
让我们看下面的代码:
return $a == 1 ? 'one' : $a == 2 ? 'two' : $a == 3 ? 'three' : $a == 4 ? 'four' : 'other';
在大多数其他语言中,它将被解释为:
return $a == 1 ? 'one' : ($a == 2 ? 'two' : ($a == 3 ? 'three' : ($a == 4 ? 'four' : 'other')))
在PHP中,它被解释为:
return ((($a == 1 ? 'one' : $a == 2) ? 'two' : $a == 3) ? 'three' : $a == 4) ? 'four' : 'other';
这可能会导致错误,因为它通常不是预期的。
通过一个单独的两步提议,PHP 7.4已实现括号的显式使用作为弃用警告,并有望在以后的版本中发生编译时错误。
结论
恰逢假期,PHP 7.4为所有PHP开发人员带来了新功能,并改善了生活质量。
WordPress网站肯定会从这些改进中受益,与以前的版本相比,使用PHP 7.4的用户可以期望更快的执行时间和更少的内存使用。
通过添加一流的属性类型声明和类型提示,箭头合并功能以及可笑的更高速度,7.4必将提高工作流程的速度和质量。