检查核心弃用
在本节中,我们将讨论 PHP 8 中被弃用的函数和用法。随着 PHP 语言的不断成熟,PHP 社区可以向 PHP 核心开发团队建议删除某些函数、类甚至语言用法。如果有三分之二的 PHP 开发团队成员投票赞成某个建议,那么该建议就会被采纳,并纳入未来的语言版本中。
对于要删除的功能,不会立即从语言中删除。相反,该函数、类、方法或用法会生成一个弃用通知。该通知用于通知开发人员该函数、类、方法或用法将在尚未指定的 PHP 版本中被禁止使用。因此,您必须密切关注弃用通知。否则将不可避免地导致将来的代码中断。
从 PHP 5.3 开始,正式启动了征求意见(RFC)程序。任何提案的状态都可以在 https://wiki.php.net/rfc 上查看。 |
首先,让我们按参数顺序来看看废弃的用法。
不推荐使用参数顺序
术语用法是指在程序代码中调用函数和类方法的方式。你会发现,在 PHP 8 中,以前允许使用的用法现在被认为是不好的做法。了解 PHP 8 如何强制执行代码使用中的最佳实践有助于编写更好的代码。
如果在定义函数或方法时混合使用了必选参数和可选参数,大多数 PHP 开发人员都认为可选参数应该在必选参数之后。在 PHP 8 中,如果不遵循这一最佳使用实践,就会导致弃用通知。决定废弃这种用法的理由是为了避免潜在的逻辑错误。
这个简单的示例演示了这种用法的不同。在下面的示例中,我们定义了一个接受三个参数的简单函数。请注意,可选参数 $op
夹在两个必选参数 $a
和 $b
之间:
// /repo/ch08/php7_usage_param_order.php
function math(float $a, string $op = '+', float $b) {
switch ($op) {
// not all cases are shown
case '+' :
default :
$out = "$a + $b = " . ($a + $b);
}
return $out . "\n";
}
在 PHP 7 中,如果我们回显添加操作的结果,就不会有问题,我们可以在这里看到:
root@php8_tips_php7 [ /repo/ch08 ]#
php php7_usage_param_order.php
22 + 7 = 29
然而,在 PHP 8 中,有一个弃用通知,之后允许操作继续。 这是在 PHP 8 中运行的输出:
root@php8_tips_php8 [ /repo/ch08 ]#
php php7_usage_param_order.php
PHP Deprecated: Required parameter $b follows optional
parameter $op in /repo/ch08/php7_usage_param_order.php on line
4
22 + 7 = 29
废弃通知是向开发人员发出的一个信号,表明这种用法被认为是一种糟糕的做法。在这种情况下,最好的做法是修改函数签名,并首先列出所有必须的参数。
下面是改写后的示例,所有版本的 PHP 都可以接受:
// /repo/ch08/php8_usage_param_order.php
function math(float $a, float $b, string $op = '+') {
// remaining code is the same
}
需要注意的是,在 PHP 8 中仍然允许使用以下用法:
function test(object $a = null, $b) {}
不过,要写出相同的函数签名,并且仍然符合先列出必选参数的最佳做法,一个更好的办法是重写这个签名,如下所示:
function test(?object $a, $b) {}
您现在已经知道了 PHP 8 内核中移除的功能。现在让我们来看看 PHP 8 扩展中被移除的功能。