已弃用功能

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() 已弃用。请将 0 偏移量和编码作为第四个参数传递。

轻量级目录访问协议

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);
?>

套接字

由于 glibc 中的上游弃用,socket_addrinfo_lookup()AI_IDN_ALLOW_UNASSIGNEDAI_IDN_USE_STD3_ASCII_RULES 标志已弃用。

添加笔记

用户贡献的笔记 2 notes

Ahmad Asjad
4 年前
(\?[^php]).*(\:).*(\?).*(\:[^=])
以上正则表达式可以帮助其他人找到嵌套的三元运算符
Techlemur
3 年前
^((?!\().*)(\?[^php]).*(\:)([\s\v]+)(?!\().*[^\/](\?)([\s\v\h]*).*(\:[^=])
查找已弃用的嵌套三元运算符的正则表达式
To Top