PHP Conference Japan 2024

PHP 7.2.x 中已弃用的特性

未加引号的字符串

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

<?php

var_dump
(NONEXISTENT);

/* 输出:
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() 函数

此函数基于通过未公开的特定于平台的 limb 大小计算的范围生成随机数。因此,此函数现已弃用。使用 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 条注释

2
匿名
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.\";
*/
?>

?>

不知道这是否是一种有意为之的行为还是副作用。
2
webmaster at thedigitalorchard dot ca
6 年前
您可以根据文档非常轻松地使用 spl_autoload_register() 替换 __autoload()

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

并且这允许您拥有多个自动加载器,而不是一个全局自动加载器。
To Top