PHP 8.1.x 廢棄的功能

PHP 核心中廢棄的功能

實現無 __serialize()__unserialize()Serializable

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

null 傳遞給內置函數的非 null 值參數

為了與用戶定義的函數行為保持一致,標量類型需要被明確標記為允許為 null,內置函數的標量類型默認情況下允許為 null 的行為已被廢棄。

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

不兼容從 floatint 的隱式轉換

float 隱式轉換為 int 將會導致精度的丟失,目前這種行為已被廢棄。 這將影響到 array 中的鍵、嚴格模式下 int 類型的聲明以及對 int 的操作。

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

在 trait 上調用 static 元素

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

__sleep() 中返回非 array 類型值

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

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

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

false 進行自動代入(Autovivification)

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

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

注意:

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

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

ctype

校驗非字符串類型的參數

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

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 設置項 filter.default 已被廢棄

GD

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

Hash

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

IMAP

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

Intl

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

多字節(jié)字符串

無參數調用 mb_check_encoding() 已被廢棄。

MySQLi

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

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

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

OCI8

INI 設置項 oci8.old_oci_close_semantics 已被廢棄。

ODBC

odbc_result_all() 已被廢棄。

PDO

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

PgSQL

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

SOAP

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

常規(guī)

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

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

FILE_BINARYFILE_TEXT 常量已被廢棄。它們從未產生過任何作用。