PHP – 已弃用的功能


由于每个新版本都会添加一些新功能,因此某些功能也会被删除,因为它们被视为已过时。在本章中,我们将了解 PHP 版本 5 之后已弃用的功能。

PHP 版本 7 中已弃用

PHP 4 样式构造函数

PHP 4 风格的构造函数是与定义它们的类同名的方法,现在已经被弃用,将来会被删除。如果 PHP 4 构造函数是类中定义的唯一构造函数,PHP 7 将发出 E_DEPRECATED。实现 __construct() 方法的类不受影响。

请看下面的例子 -


<?php
   class A {
      function A() {
         print('Style Constructor');
      }
   }
?>

它在浏览器上生成以下输出 -

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...

对非静态方法的静态调用

对非静态方法的静态调用已弃用,将来可能会删除。

请看下面的例子 -


<?php
   class A {
      function b() {
         print('Non-static call');
      }
   }
   A::b();
?>

在浏览器上生成以下输出 -

Deprecated: Non-static method A::b() should not be called statically in...
Non-static call

password_hash() salt 选项

password_hash() 函数的 salt 选项已被弃用,因此开发人员不会生成自己的(通常是不安全的)salt 。当开发人员未提供 salt 时,该函数本身会生成加密安全的 salt,因此不再需要自定义 salt 生成。

capture_session_meta SSL 上下文选项

capture_session_meta SSL 上下文选项已弃用。SSL 元数据现在通过 stream_get_meta_data() 函数使用。

ext/mcrypt

mcrypt 扩展已被弃用,取而代之的是 OpenSSL

未加引号的字符串

作为不存在的全局常量的未加引号的字符串被视为自身的字符串。此行为过去用于发出 E_NOTICE,但现在将发出 E_WARNING。在 PHP 的下一个主要版本中,将引发 Error 异常。

__autoload() 方法

__autoload() 方法已被弃用,因为它不如 spl_autoload_register() (因为它无法链接自动加载器),并且两种自动加载样式之间没有互操作性。

create_function() 函数

鉴于此函数的安全问题,现已弃用。首选的替代方法是使用匿名函数。

each() 函数

此函数会导致某些语言更改的实现问题。因此,它已被弃用。

不区分大小写的常量

不区分大小写的常量声明已弃用。现在,将 true 作为第三个参数传递给 define() 将生成弃用警告。

(real) 和 is-real() 函数

(real) cast 已弃用,请改用 (float)。is_real() 函数也被弃用,请改用 is_float()

“父级”Leyword

在没有父级的类中使用父级已被弃用,并且将来会引发编译时错误。目前,只有在运行时访问父级时,才会生成错误。

PHP 版本 8 中已弃用

如果具有默认值的参数后跟必需参数,则默认值无效。从 PHP 8.0.0 开始,这个问题已经被废弃了,通常可以通过删除默认值来解决,而功能没有变化 -


<?php
   function test($a = [], $b) {}  // 之前
   function test($a, $b) {}      // 之后
?>

此规则的一个例外是 Type $param = null 形式的参数,其中 null 默认值使类型隐式可为空。这种用法仍然是允许的,但建议使用显式可为 null 的类型 -


<?php
   function test(A $a = null, $b) {}     // 仍然允许
   function test(?A $a, $b) {}         // 建议
?>

exclude_disabled 显式设置为 false 的情况下调用 get_defined_functions() 已被弃用,不再有效。get_defined_functions() 永远不会包含禁用的函数。

返回 true false 的排序比较函数现在将引发弃用警告,并且应替换为返回小于、等于或大于零的整数的实现。


<?php
   // 更换
   usort($array, fn($a, $b) => $a > $b);
   // 具有
   usort($array, fn($a, $b) => $a <=> $b);
?>

隐式 Incompatible float 到 int 转换

导致精度损失的 float int 的隐式转换现已弃用。这会影响数组键、强制模式下的 int 类型声明以及处理 int 的运算符。

对 trait 调用 Static 元素

调用 static 方法或直接在 trait 上访问 static 属性已被弃用。静态方法和属性只能在使用 trait 的类上访问。

日期函数

date_sunrise() 和 date_sunset() 已弃用。请改用 date_sun_info()

strptime() 已被弃用。请改用 date_parse_from_format() (用于与区域设置无关的解析)或 IntlDateFormatter::p arse() (用于与区域设置相关的解析)。

strftime() 和 gmstrftime() 已弃用。您可以改用 date() (用于与区域设置无关的格式),或 IntlDateFormatter::format() (用于与区域设置相关的格式)。

动态属性

动态属性的创建已弃用。请改用允许动态属性的 stdClass