亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP5.2.x至PHP8.0.x版本升級(jí)新增特性

 更新時(shí)間:2024年02月24日 17:31:37   投稿:yin  
新版本PHP引入了許多新的語法和語言功能,以及更嚴(yán)格的類型檢查,需要進(jìn)行一些代碼修改和調(diào)整,對(duì)于使用PHP5開發(fā)的項(xiàng)目,升級(jí)到PHP8可能需要花費(fèi)一些時(shí)間和精力,此外,由于PHP對(duì)一些舊有函數(shù)和方法進(jìn)行了廢棄和刪除,可能還需要進(jìn)行一些代碼重構(gòu)

PHP 8之所以具有出色的性能,是因?yàn)樗肓薐IT編譯器、優(yōu)化了函數(shù)調(diào)用和數(shù)組操作、引入了新的數(shù)據(jù)結(jié)構(gòu)和算法,并修復(fù)和優(yōu)化了一些內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。這些改進(jìn)使得PHP 8在執(zhí)行速度和內(nèi)存管理方面都有了顯著的提升,使得開發(fā)人員能夠更高效地開發(fā)和部署Web應(yīng)用程序。

PHP5到PHP8之間的升級(jí)并不容易。由于新版本PHP引入了許多新的語法和語言功能,以及更嚴(yán)格的類型檢查,需要進(jìn)行一些代碼修改和調(diào)整。對(duì)于使用PHP5開發(fā)的項(xiàng)目,升級(jí)到PHP8可能需要花費(fèi)一些時(shí)間和精力。此外,由于PHP對(duì)一些舊有函數(shù)和方法進(jìn)行了廢棄和刪除,可能還需要進(jìn)行一些代碼重構(gòu)。因此,在進(jìn)行升級(jí)之前,開發(fā)人員需要仔細(xì)評(píng)估自己的項(xiàng)目,并制定相應(yīng)的升級(jí)計(jì)劃。

版本特性

php5.2以前(2006前)

autoload的使用;當(dāng)在代碼中使用一個(gè)未定義的類的時(shí)候,該函數(shù)就會(huì)被調(diào)用
現(xiàn)在已經(jīng)不再使用了,因?yàn)橐粋€(gè)項(xiàng)目中只能有一個(gè)__autoload();現(xiàn)在使用spl_autoload_register();
PDO和MiSQLi的使用
類型約束。
通過類型約束可以限制參數(shù)的類型,不過這個(gè)機(jī)制不完善。

php5.2(2006-2011)

(2006-2011)
JSON的支持
       增加了json_encode(),json_decode()等函數(shù)

php5.3(2009-2012)

PHP5.3 算是一個(gè)非常大的更新,新增了大量新特征,同時(shí)也做了一些不向下兼容的修改

1.棄用的功能

以下幾個(gè)功能被棄用,若在配置文件中啟用,則 PHP 會(huì)在運(yùn)行時(shí)發(fā)出警告。
Register Globals
Magic Quotes
Safe Mode

2.匿名函數(shù)

3.新增了魔術(shù)方法 __invoke(),__callStatic()

4.命名空間,但不完善,只支持類

5.后期靜態(tài)綁定

6.Heredoc 和 Nowdoc

對(duì) Heredoc 以及 Nowdoc 進(jìn)行了一些改進(jìn),它們都用于在 PHP 代碼中嵌入大段字符串。

7.用 const 定義常量

PHP5.3 起同時(shí)支持在全局命名空間和類中使用 const 定義常量。

8.三元運(yùn)算符簡(jiǎn)寫形式

9.Phar

PHP5.4(2012-2013)

1.Short Open Tag

在 PHP5.3 起被默認(rèn)開啟,在 PHP5.4 起總是可用。
使用這種簡(jiǎn)寫形式在 HTML 中嵌入 PHP 變量將會(huì)非常方便。
對(duì)于純 PHP 文件(如類實(shí)現(xiàn)文件), PHP 官方建議頂格寫起始標(biāo)記,同時(shí) 省略 結(jié)束標(biāo)記。
這樣可以確保整個(gè) PHP 文件都是 PHP 代碼,沒有任何輸出,否則當(dāng)你包含該文件后,設(shè)置 Header 和 Cookie 時(shí)會(huì)遇到一些麻煩!
注:Header 和 Cookie 必須在輸出任何內(nèi)容之前被發(fā)送。

2.數(shù)組簡(jiǎn)寫形式

3.Traits

所謂Traits就是“構(gòu)件”,是用來替代繼承的一種機(jī)制。PHP中無法進(jìn)行多重繼承,但一個(gè)類可以包含多個(gè)Traits.

4.內(nèi)置 Web 服務(wù)器

PHP從5.4開始內(nèi)置一個(gè)輕量級(jí)的Web服務(wù)器,不支持并發(fā),定位是用于開發(fā)和調(diào)試環(huán)境。

5.細(xì)節(jié)修改

PHP5.4 新增了動(dòng)態(tài)訪問靜態(tài)方法的方式:

PHP5.5(2013起)

1.yield 生成器可以用于大文件處理

2.list() 用于 foreach

3.細(xì)節(jié)修改

不推薦使用 mysql 函數(shù),推薦使用 PDO 或 MySQLi。
不再支持Windows XP.
可用 MyClass::class 取到一個(gè)類的完整限定名(包括命名空間)。
empty() 支持表達(dá)式作為參數(shù)。
try-catch 結(jié)構(gòu)新增 finally 塊。

PHP 5.5.x->PHP 5.6.x

新增

使用表達(dá)式定義常量。
使用...運(yùn)算符定義變長(zhǎng)參數(shù)函數(shù)。
使用右連接運(yùn)算符**來進(jìn)行冪運(yùn)算。
支持大于2GB的文件上傳。
使用hash_equals()函數(shù),以恒定的時(shí)間消耗來進(jìn)行字符串比較,以避免根據(jù)精確測(cè)量執(zhí)行時(shí)間反推出密碼的時(shí)序攻擊。
__debugInfo(),當(dāng)使用var_dump()輸出對(duì)象時(shí),可以用來控制要輸出的屬性和值。
對(duì)SSL/TLS的支持進(jìn)行大幅度提升,包括默認(rèn)啟用端點(diǎn)驗(yàn)證選項(xiàng)來支持證書指紋比對(duì),以避免TLS重新協(xié)商攻擊。
pgsql拓展支持以異步方式連接數(shù)據(jù)庫和執(zhí)行查詢,即可以使用非阻塞的方式與PostgreSQL數(shù)據(jù)庫進(jìn)行交互。

修改

只有設(shè)置CURLOPT_SAFE_UPLOAD為false的情況下,才能使用@file語法上傳文件,因此最好采用CURLFile代替。
使用數(shù)組標(biāo)識(shí)符為類定義數(shù)組類型的屬性時(shí),數(shù)組的鍵不會(huì)被覆蓋??梢岳斫鉃閿?shù)組里顯式鍵和隱式序列鍵相同時(shí),數(shù)組的鍵不會(huì)相互覆蓋。
對(duì)于JSON字面量true,false和null,必須采用字母全部小寫的形式。
一些Mcrypt函數(shù)需要設(shè)置有效長(zhǎng)度的密鑰和初始向量,不再接受無效長(zhǎng)度的密鑰和初始向量。

廢除

廢止從不兼容的上下文調(diào)用方法。
廢棄了iconv和mbstring配置選項(xiàng)中和編碼相關(guān)的選項(xiàng),建議使用default_charset。

PHP 5.6.x->PHP 7.0.x

新增

對(duì)于標(biāo)量類型聲明,不論是強(qiáng)制(默認(rèn))模式還是嚴(yán)格模式,都可以使用浮點(diǎn)數(shù)、字符串、布爾值、整數(shù) 類型的參數(shù)類型。
對(duì)返回類型聲明的支持,返回類型聲明( : )指明了函數(shù)返回值的類型。
null合并運(yùn)算符(??),作用相當(dāng)于簡(jiǎn)化三元表達(dá)式。如果變量存在并且值不為null,則返回自身值,否則就返回它的第二個(gè)操作數(shù)。
組合比較符<=>,用于比較兩個(gè)表達(dá)式。第一個(gè)表達(dá)式的值大于、等于、小于第二個(gè)表達(dá)式的值時(shí),對(duì)應(yīng)的返回值依次是1、0、-1。
通過define()可定義數(shù)組類型的常量。
支持通過new class來實(shí)例化一個(gè)匿名類,可用來替代一些“用后即消除”的完整類定義。
Closure::call()可以簡(jiǎn)潔地暫時(shí)綁定一個(gè)方法到對(duì)象上閉包并調(diào)用它。
為unserialize()提供過濾,可通過白名單的方式來防止惡意代碼的注入,以更安全的方式解包不可靠的數(shù)據(jù)。
IntlChar類旨在公開出更多的ICU(開源項(xiàng)目)功能,這個(gè)類自身定義了很多靜態(tài)方法用來操作Unicode字符集。若使用此類,需要先安裝Intl拓展。
從同一個(gè)namespace引入的類、常量和函數(shù)現(xiàn)在可以用單個(gè)use語句一次性導(dǎo)入。
生成器可以返回表達(dá)式,可通過調(diào)用Generator::getReturn()來獲取生成器返回值。
在最外層生成中使用yield from 就可以把一個(gè)生成器自動(dòng)委派給其它的生成器,Traversable(遍歷)對(duì)象或者array。
intdiv()函數(shù)用于整數(shù)的除法運(yùn)算。
session_start()可以接受一個(gè)數(shù)組作為參數(shù),覆蓋php.ini里的會(huì)話配置選項(xiàng)。
通過preg_replace_callback_array()函數(shù),可以使用一個(gè)關(guān)聯(lián)數(shù)組對(duì)每個(gè)正則表達(dá)式注冊(cè)回調(diào)函數(shù)。
random_bytes()和random_int()用來產(chǎn)生高安全級(jí)別的隨機(jī)字符串和隨機(jī)整數(shù)。

修改

dirname()增加了可選的第二個(gè)參數(shù) depth,用于獲取當(dāng)前目錄向上depth級(jí)的父目錄名稱。
xml_parser_free()不再足以釋放解析器資源,如果它引用了一個(gè)對(duì)象,而這個(gè)對(duì)象引用了一個(gè)解析器資源,在這種情況下,需要額外地設(shè)置取消解析器。
在PHP7中,很多運(yùn)行錯(cuò)誤都轉(zhuǎn)為異常來處理了,這些異常繼承自Error類,此類實(shí)現(xiàn)了Throwable接口(所有異常都實(shí)現(xiàn)了這個(gè)基礎(chǔ)接口)。這也就意味著,當(dāng)程序運(yùn)行發(fā)生錯(cuò)誤時(shí),以前的代碼里如果沒有捕獲Error類異常,那么一些關(guān)于錯(cuò)誤處理的代碼將觸發(fā)不了,這會(huì)導(dǎo)致程序運(yùn)行很嚴(yán)重的錯(cuò)誤。
對(duì)變量、屬性和方法的調(diào)用將嚴(yán)格遵守從左到右的解析順序,如果需要兼容舊的程序,需要使用大括號(hào)。
list()不支持空的賦值,且在賦值時(shí)按照變量被定義的順序來賦值,而非反過來的順序。
list()不能解開字符串變量,可以用str_split函數(shù)來代替。
foreach不改變內(nèi)部數(shù)組指針。
foreach通過引用遍歷時(shí),有更好的迭代特性。例如在迭代中添加一個(gè)迭代值到數(shù)組中。
一個(gè)八進(jìn)制字符里如果含有無效數(shù)字(如8),這樣的八進(jìn)制字符將產(chǎn)生解析錯(cuò)誤,而不是靜默刪節(jié)。
以負(fù)數(shù)形式進(jìn)行的位移運(yùn)算符將拋出異常,而不是返回0。
除以0將返回一個(gè)由IEEE754指定的浮點(diǎn)數(shù):+INF、-INF或者NAN,而不是拋出一個(gè)警告錯(cuò)誤并返回false。
十六進(jìn)制字符串不被視為數(shù)字,可以用filter_var()函數(shù)檢查一個(gè)字符串是否包含十六進(jìn)制數(shù)字,并將其中的十六進(jìn)制數(shù)字字符串轉(zhuǎn)換為整數(shù)。
yield變更為右聯(lián)接運(yùn)算符。
在函數(shù)定義中,不可以包含兩個(gè)或多個(gè)同名參數(shù)。
當(dāng)在函數(shù)代碼中使用func_get_arg()或者func_get_args()方法查看函數(shù)參數(shù)值,或者用debug_backtrace()方法查看回溯跟蹤,以及在異常回溯中所看到的函數(shù)參數(shù)值是當(dāng)前值,而非傳入函數(shù)時(shí)的原始值。
在ini文件里,不支持#表示注釋,需要用;來表示注釋。
JSON拓展已被JSOND拓展取代,對(duì)于數(shù)值處理要注意數(shù)值不能以點(diǎn)號(hào).結(jié)束,科學(xué)計(jì)數(shù)法e前面一位字符不可以是點(diǎn)號(hào).,如3.e3應(yīng)該改寫為3.0e3或者3e3。另外,空字符串不被當(dāng)作有效的JSON字符串。
在數(shù)值溢出時(shí),內(nèi)部函數(shù)會(huì)失敗。例如將數(shù)值很大的浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù),無法以整數(shù)表達(dá)時(shí),將會(huì)報(bào)錯(cuò)并返回null,而不是自動(dòng)將整數(shù)截?cái)嗖粓?bào)錯(cuò)誤。
由于內(nèi)部排序算法進(jìn)行了提升,會(huì)導(dǎo)致對(duì)比時(shí)視為相等元素的排序順序不穩(wěn)定。
declare(ticks)指示符不再泄漏到不同的編譯單元里。
listen端口同時(shí)監(jiān)聽IPV4地址和IPV6地址。

廢除

preg_replace()不再支持\e(可以把匹配來的字符串當(dāng)作正則表達(dá)式來用),需要用preg_replace_callback函數(shù)來替代
所有的ereg系列函數(shù)被移除,PCRE作為其替代品。
一些廢棄的mcrypt_開頭的函數(shù)被移除。
所有ext/mysql函數(shù)被移除。
移除了類似ASP的標(biāo)簽和Script PHP標(biāo)簽。例如<% %>、<%= %>、<script language=”php”>。
PHP4風(fēng)格的構(gòu)造函數(shù)(方法名和類名一樣)將被棄用。
廢棄了靜態(tài)調(diào)用未聲明成static的方法。
廢棄了password_hash()函數(shù)里的鹽值選項(xiàng),阻止開發(fā)者生成自己的鹽值(通常更不安全),該函數(shù)將自行生成密碼學(xué)安全的鹽值。
廢棄了capture_session_meta內(nèi)的SSL上下文選項(xiàng),可以通過stream_get_meta_data()來獲取SSL元數(shù)據(jù)(metadata)。

PHP 7.0.x->PHP 7.1.x

新增

可為空(Nullable)類型。參數(shù)及返回值的類型可以在其類型前加上一個(gè)?表示可空,當(dāng)啟用這個(gè)特性時(shí),傳入的參數(shù)或者函數(shù)返回的結(jié)果要么是指定類型,要么是null。
新的返回值類型void。返回值生命為void類型的函數(shù)需要省去返回值(去掉return或者return;), 注意這里返回null也不允許,但是如果企圖獲取一個(gè)返回值類型為void的函數(shù)返回值時(shí),會(huì)得到一個(gè)null,并且不會(huì)因此產(chǎn)生警告。
短數(shù)組語法([])作為list()語法的一個(gè)備選項(xiàng),可用于將數(shù)組的值賦給一些變量(包括在foreach中)。list()和[]已支持在其內(nèi)部指定鍵名,這意味著可以將任意類型的數(shù)組賦值給一些變量。
支持設(shè)置類常量的可見性。
引入了iterable偽類(與callable類似)。它可以被用在參數(shù)或者返回值類型中,代表接受一個(gè)數(shù)組或者實(shí)現(xiàn)了遍歷接口的對(duì)象。至于子類,當(dāng)iterable偽類用作父類的參數(shù)類型時(shí),子類可以收緊父類的iterable參數(shù)類型為數(shù)組類型或者實(shí)現(xiàn)了遍歷接口的對(duì)象類型。另外,子類可以將返回值由父類返回值的數(shù)組類型或者實(shí)現(xiàn)了遍歷接口的對(duì)象類型,拓展為iterable偽類類型。
多異常捕獲處理。一個(gè)catch語句塊可以通過管道字符|來實(shí)現(xiàn)多個(gè)異常的捕獲,這在需要同時(shí)處理來自不同類的不同異常時(shí)很有用。
ext/openssl 支持了AEAD(模式GCM和CCM)。方式是給openssl_encrypt()和openssl_decrypt() 添加額外的參數(shù)。
Closure::fromCallable()靜態(tài)方法可把callables轉(zhuǎn)為閉包。
異步信號(hào)處理。pcntl_async_signals()被引入,用于啟用無需ticks(開銷大)的異步信號(hào)處理。
對(duì)服務(wù)器推送的支持已經(jīng)加入到了CURL拓展中,這個(gè)可以通過curl_multi_setopt()函數(shù)與新的常量CURLMOPT_PUSHFUNCTION來調(diào)節(jié)。添加進(jìn)來的CURL_PUSH_OK和CURL_PUSH_DENY兩常量可用來批準(zhǔn)或拒絕服務(wù)器推送回調(diào)的執(zhí)行。
支持為負(fù)的字符串偏移量。
//代碼示例
var_dump("abcdef"[-2]);    //string(1)  “e”
var_dump(strpos("aabbcc", "b", -3)); //int(3)
var_dump("abcdef"[-60]);    //string(0)  “”
var_dump(strpos("aabbcc", "b", -5)); //int(2)

修改

當(dāng)參數(shù)傳遞不足時(shí)將拋出錯(cuò)誤,這僅對(duì)用戶定義的函數(shù)生效,內(nèi)置函數(shù)不生效。
在不完整的對(duì)象上不調(diào)用析構(gòu)方法(類的對(duì)象被銷毀時(shí)自動(dòng)被調(diào)用的方法__destruct)。
parse_url()提供了更加嚴(yán)格的限制,例如對(duì)RFC3986的支持。
file_get_contents()接受負(fù)數(shù)作為搜索偏移量,前提是流上下文必須是可搜索的。
tempnam()會(huì)在退回使用系統(tǒng)臨時(shí)目錄的時(shí)候,產(chǎn)生警告。
json_encode()增加了新的選項(xiàng):JSON_UNESCAPED_LINE_TERMINATORS,這個(gè)選項(xiàng)可以在指定值為JSON_UNESCAPED_UNICODE的時(shí)候?qū)τ赨+2028和U+2029這兩個(gè)字符不進(jìn)行轉(zhuǎn)義。
PDO::LastInsertId()在用于PostgreSQL數(shù)據(jù)庫時(shí),如果當(dāng)前會(huì)話(連接到PostgreSQL的數(shù)據(jù)庫連接)尚未調(diào)用過nextval,那么此方法會(huì)觸發(fā)一個(gè)錯(cuò)誤。
Session ID不在生成時(shí)進(jìn)行哈希。

廢除

mcrypt拓展被廢棄,并被OpenSSL所取代。

PHP 7.1.x->PHP 7.2.x

新增

新的對(duì)象類型,object,引進(jìn)了可用于逆變(contravariant)參數(shù)輸入和協(xié)變(convariant)返回任何對(duì)象類型。
拓展文件不需要通過文件加載進(jìn)行指定,可以在php.ini配置文件里進(jìn)行啟用,也可以使用dl()函數(shù)(運(yùn)行時(shí)載入一個(gè)php拓展)進(jìn)行啟用。
允許重寫抽象方法。當(dāng)一個(gè)抽象類繼承另一個(gè)抽象類時(shí),繼承后的抽象類可以重寫被繼承的抽象類里的抽象方法。
PDO的字符串類型已經(jīng)拓展為支持國際化的字符集。
為ext/PDO新增額外的模擬調(diào)試信息。PDOStatement::debugDumpParams()方法已更新,當(dāng)發(fā)送sql到數(shù)據(jù)庫時(shí),在一致性、行查詢(包括替換綁定占位符)將會(huì)顯示調(diào)試信息。這一特性已經(jīng)加入到模擬調(diào)試中(模擬調(diào)試打開時(shí)可用)。
ext/LDAP(輕量目錄訪問協(xié)議)拓展新增了EXOP(extended operation,拓展操作)支持。
ext/sockets拓展 具備了查找地址信息的能力,且可以連接到地址,進(jìn)行綁定和解析。
拓展了參數(shù)類型。重寫方法和接口實(shí)現(xiàn)的類型現(xiàn)在可以省略了,不過這仍然符合LSP(里氏替換原則),因?yàn)楝F(xiàn)在這種參數(shù)類型是逆變的。
命名空間可以使用尾隨逗號(hào)進(jìn)行分組引入。

修改

阻止了number_format()返回負(fù)零。
將數(shù)組轉(zhuǎn)換為對(duì)象,或者將對(duì)象轉(zhuǎn)換為數(shù)組時(shí),數(shù)字鍵得到了更好的處理。
get_class()函數(shù)不接受null參數(shù)。
計(jì)算非可數(shù)(non-countable)類型時(shí),發(fā)出警告。
ext/hash從資源變成對(duì)象。要注意舊版本里相應(yīng)的is_resource()檢查改成is_object()檢查。
SSL/TSL的默認(rèn)選項(xiàng)的改進(jìn)。
gettype()對(duì)閉包資源的返回值會(huì)是“resource (closed)”,而非字符串“unknown type”。
object變更為強(qiáng)制保留字,禁止在任何接口和類的名稱里使用它。
使用默認(rèn)參數(shù)的array_unique()會(huì)將不重復(fù)的原數(shù)組元素添加到一個(gè)新數(shù)組里,這可能改變?cè)瓟?shù)組元素的鍵值。
parse_str()第二個(gè)參數(shù)已改為必填項(xiàng),因?yàn)榘踩[患問題(不加第二個(gè)參數(shù)會(huì)導(dǎo)致查詢字符串參數(shù)導(dǎo)入當(dāng)前符號(hào)表)。更改后查詢字符串轉(zhuǎn)為了Array。
utf8_encode()和utf8_decode()已作為字符串處理函數(shù)移到標(biāo)準(zhǔn)拓展中,不再需要去啟用XML拓展后才能使用。
imagegd()以真彩色存儲(chǔ)真彩色圖像,而不是轉(zhuǎn)化為調(diào)色板圖像。
傳遞給session_module_name()函數(shù)的模塊名不允許為“user”,會(huì)拋出一個(gè)異常錯(cuò)誤。

廢除

sql.safe_mode ini設(shè)置項(xiàng)已被移除。
GD拓展庫里的png2wbmp()和jpeg2wbmp()已被廢棄。
__autoload()方法已廢棄,因?yàn)楹蛃pl_autoload_register()方法相比功能較差(因?yàn)闊o法鏈?zhǔn)教幚矶鄠€(gè)__autoloader),而且也無法在兩種autoloading樣式中配合使用。
track_errors ini設(shè)置和$php_errormsg變量已廢棄,因?yàn)樘峁┝烁玫姆绞剑篹rror_get_last()。
create_function()函數(shù)(有安全隱患問題,它是eval()的瘦封裝器)已被廢棄,更好的選擇是匿名函數(shù)。
mbstring.func_overload ini設(shè)置已廢棄,因?yàn)檫@個(gè)設(shè)置會(huì)影響環(huán)境中的字符串系列函數(shù),帶來相互操作中的問題。
(unset)類型強(qiáng)制轉(zhuǎn)化已廢棄,結(jié)果總是null。
gmp_random()函數(shù)已廢棄,可使用更好方式產(chǎn)生隨機(jī)數(shù):GMP拓展中的gmp_random_bits()和gmp_random_range()。
each()函數(shù)被廢棄,使用此函數(shù)遍歷時(shí),比普通的foreach()更慢,而且給新語法的變化帶來實(shí)現(xiàn)問題。
assert()字符串參數(shù)要求它能被eval()執(zhí)行,考慮到可能被執(zhí)行遠(yuǎn)程代碼,所以廢棄了assert()參數(shù)的字符串類型聲明,最好提供bool數(shù)據(jù)類型的參數(shù)。
錯(cuò)誤處理器里的$errcontent參數(shù)被廢棄。代替做法:調(diào)試器應(yīng)該自己取回錯(cuò)誤站點(diǎn)里的本地變量。
MCrypt拓展從內(nèi)核移到了PECL,由于mcrypt庫自2007年來未見任何更新,所以不建議使用mcrypt庫。代替品可以用OpenSSL,也可以用Sodium。

PHP 7.2.x->PHP 7.3.x

新增

更靈活的HereDoc和NowDoc語法,支持閉合標(biāo)記符的縮進(jìn),且不強(qiáng)制閉合標(biāo)記符的換行。但要注意閉合標(biāo)記符不要與正文中的字符串同名,避免出現(xiàn)語法錯(cuò)誤和解析錯(cuò)誤。
數(shù)組解構(gòu)(結(jié)構(gòu)化賦值)現(xiàn)在支持使用語法進(jìn)行引用賦值。這對(duì)list()也同樣支持。
instanceof接受文字作為第一個(gè)操作數(shù),但這種情況下結(jié)果總是返回false。
允許在函數(shù)和方法調(diào)用后面使用逗號(hào)。
FastCGI進(jìn)程管理器添加了log_limit、log_buffering等新選項(xiàng)以自定義FPM日志記錄。
對(duì)LDAP控件的完全支持已添加到LDAP查詢功能和ldap_parse_result()。
多字節(jié)字符串函數(shù)已可以正確處理大于2GB的字符串。
多字節(jié)字符串拓展的性能已得到全面顯著提高,尤其是大小寫轉(zhuǎn)換功能。
Arrayaccess(使對(duì)象像數(shù)組一樣被訪問)整數(shù)字符串鍵值得到嚴(yán)格解釋,整數(shù)字符串文字將不導(dǎo)致隱式轉(zhuǎn)換為整數(shù),例如$obj[“123”]將調(diào)用$obj->offsetGet(“123”);而非$obj->offsetGet(123);

修改

getimagesize()和相關(guān)函數(shù)已將BMP圖像的mime類型報(bào)告為image/bmp,而不是image/x-ms-bmp,因?yàn)榍罢咭言贗ANA(互聯(lián)網(wǎng)數(shù)字分配機(jī)構(gòu))注冊(cè)。
默認(rèn)情況下禁用rsh/ssh登錄,如果要啟用它們,需要使用imap.enable_insecure_rsh。注意IMAP庫在將郵箱名稱傳給rsh/ssh命令之前不會(huì)對(duì)其進(jìn)行過濾,因此在啟用rsh/ssh的情況下將不受信任的數(shù)據(jù)傳遞給此函數(shù)是不安全的。
出于安全方面原因,傳入cookie的名稱不進(jìn)行url解碼。
FTP默認(rèn)傳輸模式已更改為二進(jìn)制傳輸模式,而不是ASCII傳輸方式。
setcookie和setrowcookie函數(shù)接受$option數(shù)組參數(shù)。
getallheaders(獲取全部HTTP請(qǐng)求頭信息)函數(shù)已可用。
垃圾回收機(jī)制有所改進(jìn),帶來很大的性能提升。
涉及SimpleXML對(duì)象的數(shù)學(xué)運(yùn)算已將文本當(dāng)作int或float,以更合適的方式處理,而非無條件地當(dāng)作整數(shù)處理。

廢除

大小寫不敏感的常量聲明已廢棄。
廢棄在命名空間里使用assert命名函數(shù),因?yàn)閍ssert()函數(shù)屬于引擎特殊處理的情況。
image2wbmp()函數(shù)已廢棄。
已廢棄:將一個(gè)非字符串內(nèi)容傳遞給字符串搜索函數(shù)。替代為所有待搜索的內(nèi)容都會(huì)被當(dāng)作是字符串,而不是ASCII編碼值。如果需要依賴這個(gè)已被廢棄的特性,需要將傳入的非字符串內(nèi)容先顯式轉(zhuǎn)換為字符串類型,或者顯式地調(diào)用chr()。

PHP 7.3.x->PHP 7.4.x

新增

類的屬性支持添加指定的類型聲明。
支持完整的協(xié)變和逆變。協(xié)變使子類能比父類的返回類型更具體,逆變使子類能比父類接受的參數(shù)類型更寬泛。
合并空運(yùn)算符賦值,??=后面可以接函數(shù)名。
數(shù)組展開操作中??梢杂?..接數(shù)組名作為另一個(gè)數(shù)組的數(shù)組項(xiàng)。
數(shù)字文字可以在數(shù)字之間包含下劃線。
弱引用允許保留對(duì)對(duì)象的引用,但不會(huì)阻止對(duì)象被銷毀。弱引用是通過變量來創(chuàng)建的,指向的是原始對(duì)象的符號(hào)表,可以讓垃圾回收器正常的回收,可以避免循環(huán)引用帶來的內(nèi)存泄露問題,能讓引用表現(xiàn)為類似C語言里的指針操作。
允許__tostring()方法拋出異常,而非阻止程序繼續(xù)運(yùn)行的錯(cuò)誤。
如果拓展是針對(duì)libcurl>=7.56.0創(chuàng)建的,那么CURLFile不僅支持文件名的處理,也支持流封裝器的處理。
FFI拓展。該拓展提供了一種調(diào)用本地函數(shù),訪問本地變量,及創(chuàng)建和訪問C庫中定義的數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)單方法。
添加了IMG_FILTER_SCATTER圖像過濾器以將散列過濾器應(yīng)用于圖像。
mb_str_split()函數(shù)。str_split()用于將字符串分隔到數(shù)組中,但它僅可以分割字母和數(shù)字,新增的mb_str_split()函數(shù)是對(duì)其的補(bǔ)充,可以用來分割任何指定編碼的字符串。
緩存預(yù)加載特性。注意性能和內(nèi)存之間的最佳權(quán)衡可能因應(yīng)用程序而異,“預(yù)裝一切”可能是最簡(jiǎn)單的策略,但不一定是最佳策略。
可以在sql查詢中轉(zhuǎn)義問號(hào)以避免其被當(dāng)作參數(shù)占位符,寫作??允許向數(shù)據(jù)庫發(fā)送一個(gè)問號(hào),例如PostgreSQL JSON鍵緩存里存在問號(hào)時(shí)。
PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)允許檢查語句是否為只讀,即它是否不修改數(shù)據(jù)庫。
strip_tags第二個(gè)參數(shù)(允許通過的標(biāo)簽名單)已可以傳入一個(gè)數(shù)組。
添加了自定義對(duì)象序列化的新機(jī)制,它使用了兩個(gè)新的魔術(shù)方法:__serialize()和__unserialize()。新的序列化機(jī)制取代了Serializable接口。
為array_key_exists添加了一個(gè)專門的VM opcache優(yōu)化,如果該函數(shù)可以被靜態(tài)解析,則可以提高該函數(shù)的性能。如果在項(xiàng)目中使用命名空間,可能需要使用\array_key_exists()來顯式導(dǎo)入該函數(shù)。
箭頭函數(shù)提供了更簡(jiǎn)潔的定義函數(shù)的方法。

修改

get_declared_classes()函數(shù)在匿名類未實(shí)例化時(shí),不返回匿名類的名稱。
fn成了保留關(guān)鍵字,不可以作為函數(shù)名和類名,但是仍然可以作為方法名和類的常量名。
fread()和fwrite()在操作失敗時(shí)將返回false,而非空字符串或0。
token_get_all()為意外字符發(fā)出T_BAD_CHARACTER警告,而不是在令牌流中留下漏洞。
不推薦使用$this來解綁非靜態(tài)閉包里的$this。
imagescale()已支持將-1作為$new_width傳遞來使圖像縮放到指定高度時(shí)保持縱橫比。
哈希拓展已不能被禁用,它已成為PHP里很重要的組成成分,就像是日期拓展一樣。

廢除

MySQLi嵌入式服務(wù)器功能已被刪除。未記錄的mysqli::$stat屬性已被刪除,以支持mysqli::stat()。
導(dǎo)入類型庫的大小寫不敏感的常量注冊(cè)已被廢棄。
捆綁的libzip庫已被刪除。需要一個(gè)系統(tǒng)libzip>=0.11來構(gòu)建zip拓展。

PHP 7.4.x->PHP 8.0.x

新增

命名參數(shù)。命名參數(shù)允許根據(jù)參數(shù)名而不是參數(shù)位置向函數(shù)傳參,這使得參數(shù)的含義自成體系。命名參數(shù)通過在參數(shù)名前加冒號(hào)來傳遞,允許使用保留關(guān)鍵字作為參數(shù)名,參數(shù)與順序無關(guān),并允許任意跳過默認(rèn)值。參數(shù)名必須是一個(gè)標(biāo)識(shí)符,不允許動(dòng)態(tài)指定。
注解功能。注解的功能使得代碼中的聲明部分都可以添加結(jié)構(gòu)化、機(jī)器可讀的元數(shù)據(jù)。注解的目標(biāo)可以是類、類常量、屬性、方法、函數(shù)、參數(shù)。通過反射API可在運(yùn)行時(shí)獲取注解中所定義的元數(shù)據(jù)。因此注解可以成為直接嵌入代碼的配置式語言。注解使用的一個(gè)簡(jiǎn)單例子是:將接口(interface)里的可選方法改用注解實(shí)現(xiàn)。
構(gòu)造器屬性提升。構(gòu)造器里的參數(shù)可以相應(yīng)提升為類的屬性,注意對(duì)象屬性的類型不可以為callable,避免為引擎帶來混淆,因此提升的參數(shù)也不能是callable。
聯(lián)合類型。聯(lián)合類型接受多個(gè)不同的類型作為參數(shù),聲明聯(lián)合類型的語法是T1|T2|...。?T語法將當(dāng)作是聯(lián)合類型T|null的簡(jiǎn)寫。注意null類型允許在聯(lián)合類型里使用,但是不能作為一個(gè)獨(dú)立的類型使用。
match表達(dá)式。match表達(dá)式與switch表達(dá)式相似,但是match表達(dá)式里是嚴(yán)格比較(===),一個(gè)match分支只能有一個(gè)表達(dá)式,每個(gè)分支都會(huì)有一個(gè)返回值,match的匹配表達(dá)式里可以用逗號(hào)來分割多個(gè)表達(dá)式。對(duì)于match表達(dá)式,傳入的參數(shù)必須存在與表達(dá)式匹配的條件或default要處理的條件,否則會(huì)報(bào)異常。match末尾的大括號(hào)后面要用分號(hào);結(jié)束。
Nullsafe操作符(?->)。類屬性和方法可以通過nullsafe操作符訪問。對(duì)象引用解析為null時(shí)不拋出異常,而是返回null,如果是鏈?zhǔn)秸{(diào)用中的一部分,則剩余鏈條會(huì)直接跳過。此操作的結(jié)果類似于在每次訪問前用is_null()函數(shù)判斷一下屬性和方法是否存在,但代碼更加簡(jiǎn)潔。注意僅當(dāng)null是屬性或者方法可能返回的預(yù)期值的情況下,才推薦用Nullsafe操作符。如果業(yè)務(wù)中需要明確指出錯(cuò)誤,那么還是用拋出異常的方案來處理更好。
WeakMap類。WeakMap類接受對(duì)象作為鍵的映射(或字典),WeakMap鍵中的對(duì)象不影響對(duì)象的引用計(jì)數(shù)。它的主要用途是構(gòu)建源自對(duì)象的數(shù)據(jù)緩存,這些數(shù)據(jù)不需要比對(duì)象存在更長(zhǎng)的時(shí)間。WeakMap類實(shí)現(xiàn)了ArrayAccess(數(shù)組式訪問)、Iterator(迭代器)和Countable(可計(jì)數(shù)),所以在大多數(shù)情況下,它可以以與關(guān)聯(lián)數(shù)組相同的方式使用。
static(如“后期靜態(tài)綁定”)可以用作返回類型。
可以通過$object::class來獲取類名,與get_class($object)返回結(jié)果一致。
HashContext對(duì)象已可以序列化。
new,instanceof(判斷一個(gè)對(duì)象是否是某個(gè)類的實(shí)例,或者實(shí)現(xiàn)了某個(gè)接口)可用于任何表達(dá)式。用法為 new (expression) (...$args)和$obj instanceof (expression)。
支持mixed(值可為任何類型)類型。
對(duì)加密消息語法(CMS)的支持。由用于加密、解密、簽名、驗(yàn)證和讀取的函數(shù)組成。
可選的壓縮、加密功能已列入phpinfo中。
opcache拓展新增了即時(shí)編譯(JIT)的支持。
PhpToken向標(biāo)記器添加了一個(gè)基于對(duì)象的接口,它提供了更統(tǒng)一和符合功效學(xué)的表示,具備更高的內(nèi)存效率和更快的速度。

修改

數(shù)字與非數(shù)字類型的字符串非嚴(yán)格比較(==)時(shí),將把數(shù)字轉(zhuǎn)換為字符串,然后比較兩個(gè)字符串。數(shù)字與數(shù)字類型的字符串非嚴(yán)格比較(==)時(shí),則可理解為是把數(shù)字類型的字符串轉(zhuǎn)為數(shù)字,然后比較兩個(gè)數(shù)字。例如0==”” 將返回false,而不是true。
斷言(Assertion)失敗已默認(rèn)拋出異常,如果需要改回之前的行為,需要在ini里設(shè)置assert.exception=0。
與類名相同的方法名不被當(dāng)作構(gòu)造方法,類的構(gòu)造方法需用__construct()。
不允許通過靜態(tài)調(diào)用的方式調(diào)用非靜態(tài)方法。因此is_callable()在檢查具有類名的非靜態(tài)方法時(shí)會(huì)失敗(必須檢查對(duì)象實(shí)例)。
已刪除對(duì)對(duì)象使用array_key_exists()函數(shù)的能力??梢允褂胕sset()或者property_exists()函數(shù)替代。
在沒有父級(jí)的類中使用父級(jí)聲明會(huì)造成嚴(yán)重的編譯時(shí)錯(cuò)誤。
@運(yùn)算符不消除嚴(yán)重錯(cuò)誤(E_ERROR\E_CORE_ERROR\E_COMPILE_ERROR\E_USER_ERROR\E_RECOVERABLE_ERROR\E_PARSE)。使用@時(shí)期望error_reporting為0,錯(cuò)誤處理函數(shù)應(yīng)調(diào)整為使用隱式檢查。注意在生產(chǎn)環(huán)境中不要顯示出錯(cuò)誤信息,因?yàn)檫@可能導(dǎo)致信息泄露,需確保display_errors=Off與錯(cuò)誤記錄一同使用。
#[不被解釋為注釋的開始,因?yàn)榇苏Z法已用于屬性。
data://流封裝器不支持寫入。
連接運(yùn)算符.的優(yōu)先級(jí)相對(duì)于位移、加法、減法的優(yōu)先級(jí)發(fā)生了變化。

廢除

過濾器string.strip_tags(此過濾器等同于用strip_tags處理所有的流數(shù)據(jù))已廢棄。
read_exif_data()已被廢除;應(yīng)該改用exif_read_data()。exif_read_data()函數(shù)的作用是從一個(gè)圖片文件里讀取EXIF頭信息,這樣就可以讀取數(shù)碼相機(jī)產(chǎn)生的元數(shù)據(jù)。

總結(jié)

到此這篇關(guān)于PHP5.2.x至PHP8.0.x版本升級(jí)新增特性的文章就介紹到這了,更多相關(guān)PHP5.2至PHP8版本特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論