PHP 8.1.x 廢棄的功能

PHP 核心中廢棄的功能

實(shí)現(xiàn)無(wú) __serialize()__unserialize()Serializable

如果不用兼容 PHP 7.4 以前的版本,就只需要實(shí)現(xiàn)新的方法,否則需要同時(shí)實(shí)現(xiàn)兩個(gè)方法。

null 傳遞給內(nèi)置函數(shù)的非 null 值參數(shù)

為了與用戶定義的函數(shù)行為保持一致,標(biāo)量類型需要被明確標(biāo)記為允許為 null,內(nèi)置函數(shù)的標(biāo)量類型默認(rèn)情況下允許為 null 的行為已被廢棄。

<?php
var_dump
(str_contains("foobar"null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
//             is deprecated
?>

不兼容從 floatint 的隱式轉(zhuǎn)換

float 隱式轉(zhuǎn)換為 int 將會(huì)導(dǎo)致精度的丟失,目前這種行為已被廢棄。 這將影響到 array 中的鍵、嚴(yán)格模式下 int 類型的聲明以及對(duì) int 的操作。

<?php
$a 
= [];
$a[15.5]; // 廢棄,作為鍵值將會(huì)丟失 0.5
$a[15.0]; // OK,因?yàn)?nbsp;15.0 == 15
?>

在 trait 上調(diào)用 static 元素

在 trait 上直接調(diào)用 static 方法、直接訪問(wèn) static 屬性的行為已被廢棄。靜態(tài)方法和屬性只能在使用了 trait 的類上被訪問(wèn)。

__sleep() 中返回非 array 類型值

__sleep() 中返回一個(gè)非 array 類型的值現(xiàn)在將會(huì)產(chǎn)生一個(gè)診斷。

在返回值為 void 的函數(shù)中通過(guò)引用進(jìn)行返回

<?php
function &test(): void {}
?>
這種函數(shù)是相互矛盾的,在調(diào)用時(shí)已經(jīng)發(fā)出了 E_NOTICE 提示:Only variable references should be returned by reference。

對(duì) false 進(jìn)行自動(dòng)代入(Autovivification)

自動(dòng)代入指的是追加一個(gè)值時(shí)創(chuàng)建出新 array 的過(guò)程。對(duì)于標(biāo)量值而言,自動(dòng)代入是不被允許的;然而 false 是一個(gè)例外。現(xiàn)在這將會(huì)被廢棄。

<?php
$arr 
false;
$arr[] = 2;   // 廢棄
?>

注意:

對(duì) null 或者未定義的值進(jìn)行自動(dòng)代入仍然是被允許的:

<?php
// 從未定義的值
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// 從 null
$arr null;
$arr[] = 2;
?>

ctype

校驗(yàn)非字符串類型的參數(shù)

傳遞一個(gè)非字符串類型參數(shù)的行為已被廢棄。在將來(lái),參數(shù)將被解釋為一個(gè)字符串而不是 ASCII 編碼。根據(jù)可預(yù)期的行為,參數(shù)需要被轉(zhuǎn)化為 string 或者對(duì) chr() 進(jìn)行一次顯式調(diào)用。這會(huì)影響所有的 ctype_*() 函數(shù)。

Date

date_sun_info() 的支持下,date_sunrise()date_sunset() 已被廢棄。

strptime() 已被廢棄。請(qǐng)使用 date_parse_from_format() (不依賴 locale 的解析)或者 IntlDateFormatter::parse() (依賴 locale 的解析)代替。

strftime()gmstrftime() 已被廢棄。請(qǐng)使用date()(不依賴 locale 的格式化)或者 IntlDateFormatter::format() (依賴 locale 的格式化)代替。

Filter

FILTER_SANITIZE_STRINGFILTER_SANITIZE_STRIPPED 過(guò)濾器已被廢棄。

INI 設(shè)置項(xiàng) filter.default 已被廢棄

GD

imageopenpolygon()imagefilledpolygon()num_points 參數(shù)已被廢棄。

Hash

mhash()、 mhash_keygen_s2k()、 mhash_count()mhash_get_block_size()、 mhash_get_hash_name() 已被廢棄。 請(qǐng)使用 hash_*() 系列函數(shù)代替。

IMAP

NIL 常量已被廢棄。請(qǐng)使用 0 代替。

Intl

使用 bool 參數(shù)調(diào)用 IntlCalendar::roll() 已被廢棄。請(qǐng)分別使用 1-1 來(lái)代替 true and false。

多字節(jié)字符串

無(wú)參數(shù)調(diào)用 mb_check_encoding() 已被廢棄。

MySQLi

mysqli_driver::$driver_version 屬性已被廢棄。它是無(wú)意義且過(guò)時(shí)的,使用 PHP_VERSION_ID 來(lái)代替。

使用 mysqli 參數(shù)來(lái)調(diào)用 mysqli::get_client_info()mysqli_get_client_info() 已被廢棄。請(qǐng)不帶任何參數(shù)調(diào)用 mysqli_get_client_info() 來(lái)獲取客戶端類庫(kù)的版本信息。

mysqli::init() 方法已被廢棄。使用 parent::__construct() 來(lái)代替對(duì) parent::init() 的調(diào)用。

OCI8

INI 設(shè)置項(xiàng) oci8.old_oci_close_semantics 已被廢棄。

ODBC

odbc_result_all() 已被廢棄。

PDO

PDO::FETCH_SERIALIZE 獲取模式已被廢棄。

PgSQL

對(duì)于所有 pgsql_*() 函數(shù)不傳遞連接參數(shù)的方式已被廢棄。

SOAP

在 SSL 流上下文參數(shù)的代替下, SoapClient::__construct()ssl_method 選項(xiàng)已被廢棄。

常規(guī)

對(duì)一個(gè)對(duì)象調(diào)用 key()、current()next()、prev()reset()、end() 已被廢棄。對(duì)一個(gè)對(duì)象應(yīng)優(yōu)先使用 get_mangled_object_vars(),或使用 ArrayIterator。

INI 配置項(xiàng) auto_detect_line_endings 已被廢棄。如有必要,可以手動(dòng)處理 "\r" 換行符。

FILE_BINARYFILE_TEXT 常量已被廢棄。它們從未產(chǎn)生過(guò)任何作用。