PHP 7.2.x 中已弃用的功能

未加引号的字符串

不存在的全局常量的未加引号的字符串将被视为其自身的字符串。此行为以前会发出一个 **E_NOTICE**,但现在会发出一个 **E_WARNING**。在 PHP 的下一个主要版本中,将抛出一个 Error 异常。

<?php

var_dump
(NONEXISTENT);

/* Output:
Warning: Use of undefined constant NONEXISTENT - assumed 'NONEXISTENT' (this will throw an Error in a future version of PHP) in %s on line %d
string(11) "NONEXISTENT"
*/

png2wbmp()jpeg2wbmp()

GD 扩展中的 png2wbmp()jpeg2wbmp() 函数现已弃用,将在 PHP 的下一个主要版本中移除。

**INTL_IDNA_VARIANT_2003** 变体

Intl 扩展已弃用 **INTL_IDNA_VARIANT_2003** 变体,该变体目前用作 idn_to_ascii()idn_to_utf8() 的默认值。PHP 7.4 将会看到这些默认值更改为 **INTL_IDNA_VARIANT_UTS46**,PHP 的下一个主要版本将完全移除 **INTL_IDNA_VARIANT_2003**。

__autoload() 方法

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

track_errors ini 设置和 $php_errormsg 变量

track_errors ini 设置启用时,当发生非致命错误时,将在本地作用域中创建一个 $php_errormsg 变量。鉴于检索此类错误信息的最佳方法是使用 error_get_last(),因此此功能已弃用。

create_function() 函数

鉴于此函数的安全问题(它是 eval() 的一个薄包装器),因此此过时的函数现已弃用。首选的替代方法是使用 匿名函数

mbstring.func_overload ini 设置

鉴于在启用此设置的环境中使用基于字符串的函数所带来的互操作性问题,它现已弃用。

(unset) 转换

将任何表达式转换为此类型将始终导致 **null**,因此此多余的转换类型现已弃用。

parse_str() ללא ארגומנט שני

如果没有 parse_str() 的第二个参数,查询字符串参数将填充本地符号表。鉴于此的安全隐患,在没有第二个参数的情况下使用 parse_str() 现已弃用。该函数应始终使用两个参数,因为第二个参数会导致查询字符串被解析为一个数组。

gmp_random() 函数

此函数基于通过未公开的特定于平台的肢体大小计算的范围生成一个随机数。因此,该函数现已弃用。使用 GMP 扩展生成随机数的首选方法是通过 gmp_random_bits()gmp_random_range()

each() 函数

此函数的迭代速度远慢于正常的 foreach,并且会导致某些语言更改的实现问题。因此,它已弃用。

assert() 带字符串参数

使用带有字符串参数的 assert() 需要对字符串进行 eval() 处理。鉴于远程代码执行的可能性,使用带有字符串参数的 assert() 现已弃用,应改为使用布尔表达式。

$errcontext 错误处理程序的参数

$errcontext 参数包含错误位置的所有局部变量。鉴于其使用率较低,以及它给内部优化带来的问题,它现已弃用。相反,应使用调试器来检索错误位置的局部变量信息。

read_exif_data() 函数

read_exif_data() 别名已弃用。应改为使用 exif_read_data() 函数。

添加注释

用户贡献的注释 2 注释

Anonymous
6 年前
在 PHP 7.2.0 中,空的 <?php?> 代码块会输出“未加引号的字符串”警告。为了防止这种情况,请在代码块中添加至少一个空格。

示例
<?php

<?php/*
echo "This was some useful code.\n";
*/
?>

?>
显示:PHP Warning: Use of undefined constant php - assumed 'php' (this will throw an Error in a future version of PHP)

通过以下方式修复
<?php

<?php /*
echo "This was some useful code.\";
*/
?>

?>

不知道这是否是一个故意的行为或副作用。
webmaster at thedigitalorchard dot ca
6 年前
您可以像文档中所述那样轻松地使用 spl_autoload_register() 代替 __autoload()

spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});

这使您可以拥有多个自动加载器,而不是一个全局自动加载器。
To Top