PHP 8.1.x 廢棄的功能

PHP 核心中廢棄的功能

實現(xiàn)無 __serialize()__unserialize()Serializable

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

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

為了與用戶定義的函數(shù)行為保持一致,標量類型需要被明確標記為允許為 null,內(nèi)置函數(shù)的標量類型默認情況下允許為 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 將會導(dǎo)致精度的丟失,目前這種行為已被廢棄。 這將影響到 array 中的鍵、嚴格模式下 int 類型的聲明以及對 int 的操作。

<?php
$a 
= [];
$a[15.5]; // 廢棄,作為鍵值將會丟失 0.5
$a[15.0]; // OK,因為 15.0 == 15
?>

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

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

__sleep() 中返回非 array 類型值

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

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

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

false 進行自動代入(Autovivification)

自動代入指的是追加一個值時創(chuàng)建出新 array 的過程。對于標量值而言,自動代入是不被允許的;然而 false 是一個例外?,F(xiàn)在這將會被廢棄。

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

注意:

null 或者未定義的值進行自動代入仍然是被允許的:

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

ctype

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

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

Date

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

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

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

Filter

FILTER_SANITIZE_STRINGFILTER_SANITIZE_STRIPPED 過濾器已被廢棄。

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

GD

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

Hash

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

IMAP

NIL 常量已被廢棄。請使用 0 代替。

Intl

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

多字節(jié)字符串

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

MySQLi

mysqli_driver::$driver_version 屬性已被廢棄。它是無意義且過時的,使用 PHP_VERSION_ID 來代替。

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

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

OCI8

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

ODBC

odbc_result_all() 已被廢棄。

PDO

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

PgSQL

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

SOAP

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

常規(guī)

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

INI 配置項 auto_detect_line_endings 已被廢棄。如有必要,可以手動處理 "\r" 換行符。

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