PHP Conference Japan 2024

已弃用的特性

PHP 核心

嵌套三元运算符无显式括号

嵌套三元运算必须显式使用括号来规定运算的顺序。以前,在不使用括号的情况下,左结合性在大多数情况下不会产生预期的行为。

<?php
1
? 2 : 3 ? 4 : 5; // 已弃用
(1 ? 2 : 3) ? 4 : 5; // 正确
1 ? 2 : (3 ? 4 : 5); // 正确
?>

当嵌套到中间操作数时,不需要括号,因为这始终是明确的,并且不受结合性的影响

1 ? 2 ? 3 : 4 : 5 // 正确

使用花括号访问数组和字符串偏移量

使用花括号访问数组和字符串偏移量的语法已弃用。请使用 $var[$idx] 而不是 $var{$idx}

(real) 类型转换和 is_real() 函数

已弃用 (real) 类型转换,请使用 (float) 代替。

已弃用 is_real() 函数,请使用 is_float() 代替。

在使用 $this 时解除绑定 $this

已弃用解除绑定使用 $this 的非静态闭包的 $this

parent 关键字在没有父类的情况下

在没有父类的类中使用 parent 已弃用,将来会抛出编译时错误。目前,只有在运行时访问父类时才会生成错误。

allow_url_include INI 选项

已弃用 allow_url_include ini 指令。启用它会在启动时生成弃用通知。

进制转换函数中的无效字符

base_convert()bindec()octdec()hexdec() 传递无效字符现在会生成弃用通知。结果仍然会像无效字符不存在一样计算。继续允许前导和尾随空格,以及 0x 类型的前缀(取决于基数)。

在对象上使用 array_key_exists()

已弃用在对象上使用 array_key_exists()。相反,应使用 isset()property_exists()

魔术引号函数

已弃用 get_magic_quotes_gpc()get_magic_quotes_runtime() 函数。它们始终返回 false

hebrevc() 函数

已弃用 hebrevc() 函数。它可以用 nl2br(hebrev($str)) 替换,或者最好是使用 Unicode RTL 支持。

convert_cyr_string() 函数

已弃用 convert_cyr_string() 函数。它可以用 mb_convert_string()iconv()UConverter 之一替换。

money_format() 函数

已弃用 money_format() 函数。它可以用 intl NumberFormatter 功能替换。

ezmlm_hash() 函数

已弃用 ezmlm_hash() 函数。

restore_include_path() 函数

已弃用 restore_include_path() 函数。它可以用 ini_restore('include_path') 替换。

Implode 使用历史参数顺序

以相反的顺序向 implode() 传递参数已弃用,请使用 implode($glue, $parts) 而不是 implode($parts, $glue)

COM

已弃用使用不区分大小写的常量注册导入类型库。

过滤器

已弃用 FILTER_SANITIZE_MAGIC_QUOTES,请使用 FILTER_SANITIZE_ADD_SLASHES 代替。

多字节字符串

mb_ereg_replace() 传递非字符串模式已弃用。目前,非字符串模式被解释为 ASCII 代码点。在 PHP 8 中,模式将被解释为字符串。

mb_strrpos() 传递编码作为第 3 个参数已弃用。改为传递 0 偏移量,并将编码作为第 4 个参数传递。

轻量级目录访问协议

已弃用 ldap_control_paged_result_response()ldap_control_paged_result()。分页控件可以与 ldap_search() 一起发送。

反射

ReflectionType::__toString() 的调用现在会生成弃用通知。自 PHP 7.1 以来,此方法在文档中已弃用,取而代之的是 ReflectionNamedType::getName(),但由于技术原因没有抛出弃用通知。

所有 Reflection 类上的 export() 方法已弃用。构造一个 Reflection 对象并将其转换为字符串。

<?php
// ReflectionClass::export(Foo::class, false) 为:
echo new ReflectionClass(Foo::class), "\n";

// $str = ReflectionClass::export(Foo::class, true) 为:
$str = (string) new ReflectionClass(Foo::class);
?>

套接字

已弃用 socket_addrinfo_lookup()AI_IDN_ALLOW_UNASSIGNEDAI_IDN_USE_STD3_ASCII_RULES 标志,因为 glibc 中存在上游弃用。

添加注释

用户贡献的注释 1 条注释

Ahmad Asjad
4 年前
(\?[^php]).*(\:).*(\?).*(\:[^=])
以上正则表达式可以帮助其他人找到嵌套的三元运算符
To Top