Php 简明教程
PHP – Deprecated Features
随着每个新版本的添加一些新功能,一些功能也会被移除,因为它们被认为已过时。在本章中,我们将了解 PHP 版本 5 之后的弃用功能。
Deprecated in PHP Ver 7
PHP 4 Style Constructors
PHP 4 样式的构造函数是与它们定义所在的类同名的函数,现在已弃用,并且将在未来移除。如果 PHP 4 构造函数是类中定义的唯一构造函数,则 PHP 7 将发出 E_DEPRECATED。实现 __construct() 函数的类不受影响。
Example
请看以下示例:
<?php
class A {
function A() {
print('Style Constructor');
}
}
?>
它在浏览器中生成以下 output −
Deprecated: Methods with the same name as their class will not be
constructors in a future version of PHP; A has a deprecated constructor in...
Example
请看以下示例:
<?php
class A {
function b() {
print('Non-static call');
}
}
A::b();
?>
它在浏览器中生成以下 output −
Deprecated: Non-static method A::b() should not be called statically in...
Non-static call
password_hash() salt option
password_hash() 函数的 salt 选项已弃用,以便开发人员不会生成他们自己的(通常不安全的)salt。当开发人员不提供 salt 时,函数本身会生成一个加密安全的 salt - 因此不再需要自定义 salt 生成了。
capture_session_meta SSL context option
capture_session_meta SSL 上下文选项已弃用。SSL 元数据现在通过 stream_get_meta_data() 函数使用。
Unquoted Strings
不存在全局常量的未引用的字符串将被视为它们自身的字符串。此行为过去会发出 E_NOTICE,但现在会发出 E_WARNING。在下一个 PHP 主要版本中,将转而引发 Error 异常。
Deprecated in PHP Ver 8
如果具有默认值的参数后面跟随一个必需参数,则默认值无效。自 PHP 8.0.0 起,则此操作已被弃用,并且通常可以通过删除默认值来解决,而无需更改功能 −
<?php
function test($a = [], $b) {} // Before
function test($a, $b) {} // After
?>
此规则的一个例外是形式为 Type $param = null 的参数,其中 null 默认值使类型隐式可为 null。这种用法仍然允许,但建议改为使用显式可为 null 的类型 −
<?php
function test(A $a = null, $b) {} // Still allowed
function test(?A $a, $b) {} // Recommended
?>
显式将 exclude_disabled 设置为 false 调用 get_defined_functions() 已被弃用,并且不再有效。get_defined_functions() 永远不会包含已禁用的函数。
现在,返回 true 或 false 的排序比较函数将抛出弃用警告,并且应该用返回小于、等于或大于零的整数的实现来替换。
<?php
// Replace
usort($array, fn($a, $b) => $a > $b);
// With
usort($array, fn($a, $b) => $a <=> $b);
?>
Implicit Incompatible float to int Conversions
导致精度损失的浮点数到整数的隐式转换现在已弃用。这会影响数组键、强制模式下的 int 类型声明以及对整数进行操作的操作符。