PHP 8.0 废弃的功能
PHP 核心中废弃的功能
-
如果带有默认值的参数后面跟着一个必要的参数,那么默认值就会无效。这在 PHP 8.0.0 中已被废弃,通常可以通过删除默认值,不影响现有功能:
<?php
function test($a = [], $b) {} // 之前
function test($a, $b) {} // 之后
?>这条规则的一个例外是
Type $param = null
形式的参数,其中 null 的默认值使得类型隐式为空。这种用法仍然是允许的,但仍建议使用显式可空类型。<?php
function test(A $a = null, $b) {} // 旧写法,仍可用
function test(?A $a, $b) {} // 推荐写法
?> -
参数
exclude_disabled
不能设置为false
来调用 get_defined_functions(),该参数已被废弃,不再起作用。 get_defined_functions() 绝不会再包含禁用的函数。
Enchant
-
enchant_broker_set_dict_path() and enchant_broker_get_dict_path() are deprecated, because that functionality is neither available in libenchant < 1.5 nor in libenchant-2.
-
enchant_dict_add_to_personal() is deprecated; use enchant_dict_add() instead.
-
enchant_dict_is_in_session() is deprecated; use enchant_dict_is_added() instead.
-
enchant_broker_free() and enchant_broker_free_dict() are deprecated; unset the object instead.
-
The
ENCHANT_MYSPELL
andENCHANT_ISPELL
constants are deprecated.
LibXML
libxml_disable_entity_loader() has been deprecated. As libxml 2.9.0 is now
required, external entity loading is guaranteed to be disabled by default, and this function is
no longer needed to protect against XXE attacks, unless the (still vulnerable).
LIBXML_NOENT
is used.
In that case, it is recommended to refactor the code using
libxml_set_external_entity_loader() to suppress loading of external entities.
PGSQL / PDO PGSQL
-
The constant
PGSQL_LIBPQ_VERSION_STR
now has the same value asPGSQL_LIBPQ_VERSION
, and thus is deprecated. -
Function aliases in the pgsql extension have been deprecated. See the following list for which functions should be used instead:
- pg_errormessage() → pg_last_error()
- pg_numrows() → pg_num_rows()
- pg_numfields() → pg_num_fields()
- pg_cmdtuples() → pg_affected_rows()
- pg_fieldname() → pg_field_name()
- pg_fieldsize() → pg_field_size()
- pg_fieldtype() → pg_field_type()
- pg_fieldnum() → pg_field_num()
- pg_result() → pg_fetch_result()
- pg_fieldprtlen() → pg_field_prtlen()
- pg_fieldisnull() → pg_field_is_null()
- pg_freeresult() → pg_free_result()
- pg_getlastoid() → pg_last_oid()
- pg_locreate() → pg_lo_create()
- pg_lounlink() → pg_lo_unlink()
- pg_loopen() → pg_lo_open()
- pg_loclose() → pg_lo_close()
- pg_loread() → pg_lo_read()
- pg_lowrite() → pg_lo_write()
- pg_loreadall() → pg_lo_read_all()
- pg_loimport() → pg_lo_import()
- pg_loexport() → pg_lo_export()
- pg_setclientencoding() → pg_set_client_encoding()
- pg_clientencoding() -> pg_client_encoding()
Standard Library
-
Sort comparison functions that return
true
orfalse
will now throw a deprecation warning, and should be replaced with an implementation that returns an integer less than, equal to, or greater than zero.<?php
// Replace
usort($array, fn($a, $b) => $a > $b);
// With
usort($array, fn($a, $b) => $a <=> $b);
?>
Zip
-
Using an empty file as ZipArchive is deprecated. Libzip 1.6.0 does not accept empty files as valid zip archives any longer. The existing workaround will be removed in the next version.
-
The procedural API of Zip is deprecated. Use ZipArchive instead. Iteration over all entries can be accomplished using ZipArchive::statIndex() and a for loop:
<?php
// iterate using the procedural API
assert(is_resource($zip));
while ($entry = zip_read($zip)) {
echo zip_entry_name($entry);
}
// iterate using the object-oriented API
assert($zip instanceof ZipArchive);
for ($i = 0; $entry = $zip->statIndex($i); $i++) {
echo $entry['name'];
}
?>
Reflection
-
ReflectionFunction::isDisabled() is deprecated, as it is no longer possible to create a ReflectionFunction for a disabled function. This method now always returns
false
. -
ReflectionParameter::getClass(), ReflectionParameter::isArray(), and ReflectionParameter::isCallable() are deprecated. ReflectionParameter::getType() and the ReflectionType APIs should be used instead.

User Contributed Notes 1 note
If you try to get all methods / functions assigning an optional argument before a mandatory one, try this regex (single line)
<?php
function\s+[a-z][a-zA-Z0-9_]*\((?:\$[a-z][a-zA-Z0-9]*\s*,\s*)*
(?:\$[a-z][A-Za-z0-9_]*\s*=[^\$\)]+)+\$[a-z][a-zA-Z0-9_]*\)
?>
for
<?php
public function test($a, $b) {
$a = [];
$b = [$abc => $ss[],
];
}
private function too($c, $a = true, $b) {
}
protected function bar($a = []) {
}
public function foo($a, $b = true) {
}
public function fooBar32($a=true, $b = [], $c) {
}
private function oo_bAr($a = []) {
}
?>
it will match too() and fooBar32()
Have a nice migration! ;)
备份地址:http://www.lvesu.com/blog/php/migration80.deprecated.php