本文主要和大家詳細介紹PHP7.2 版本效能,希望能幫助大家對PHP7.2有更清晰的認識。
Core:
對於封閉資源來說,gettype()函數將傳回# resource(closed),取代先前的unknown type#。
對於__PHP_Incomplete_Class類別物件來說,#is_object ()函數將傳回true。
移除對Netware作業系統的支援。
array型別轉換成object型別((object)或settype() )時,將把整數鍵轉換成屬性名,這修復了先前版本的數字鍵不能作為屬性名的問題。
object型別轉換成array型別((array)或settype() )時,以及物件的屬性對應到陣列中(get_object_vars()#)時,會把整數屬性轉換成數字鍵,這修正了先前版本的整數屬性不可存取的問題。
對未定義常數的非限定性引用將導致一個waring級別的錯誤,取代之前的notice級別,之後的版本會是error級別的錯誤。
支援的最低的Windows版本是Windows 7和Windows Server 2008 R2。
取消了原生trait屬性值的相容性檢查行為。
object#將不能被用作類別名稱。
BcMath
和fmod()函數一樣,bcmod()函數取消了取模運算(%),也就是數值的小數部分截斷變成整數。例如:bcmod('4','3.5')將回傳0.5而不是1。
Hash
hash_hmac (),hash_hmac_file(),hash_pbkdf2()以及hash_init() (options參數為HASH_HMAC時),這些函數將不再支援非加密的雜湊函數。
JSON
當json_decode()函數的第二個參數assoc是null時,options支援選項中的JSON_OBJECT_AS_ARRAY會啟用,在之前的版本中這個參數是我們一直忽略的。
Session
。除了register_globals相關的程式碼,"!"可以用在$_SESSION##的鍵名中。
session#被用來正確的管理會話狀態,禁止無效操作,當程式碼有問題時將會觸發該變化。如果你不幸遇到了這個問題,這表示你的程式碼是有問題的。
sesseion_start(),session_status(),session_regenerate_id(),這些函數被用來設定或傳回正確的會話狀態。
session_unset(),session_write_close()/ session_commit(),session_abort(),session_reset(),這些函數傳回從沒有傳回值變成返回布林值。他們允許允許空的參數,並且會對這些空的檢查進行檢查。
session_start(),session_set_cookie_params(), session_name(), session_module_name(),session_set_save_handler()##session_regenerate_id(),session_cache_limiter(),session_cache_expire()#session_cache_expire()#,session_unset(), session_destroy(), session_write_close()#/# session_commit(),
,這些函數會禁止無效的會話狀態和http頭狀態,傳回正確的布林值或數值。 session.name#,session.save_path, session.cookie_lifetime,session.cookie_path,session.cookie_domain,session.cookie_httponly,session.cookie_secure,session.use_cookies,session.use_only_cookies,session.use_strict_mode,session.referer_check, session.cache_limiter,session.cache_expire,session.lazy_write#,session. save_handler,session.serialize_handler,session.gc_probability,session.gc_pior,session.gc_maxlifetime,這些ini的值的設定需透過
函數的成功調用,無效的ini修改操作將不會成功。 由於會話能夠被正確管理(session_start()),部分##E_ERROR 層級的錯誤訊息將轉換成
E_WARNING
當頭部訊息已經被傳送,此時去設定新的ini值將無效(透過session_name(),session_module_name(),session_save_path(),session_cache_limiter()和
session_cache_expire()這些函數)。
Standard自7.1版本以來,在64位元機器上,同一個種子的mt_rand()和
rand()產生的隨機數順序可能會不一樣。
2.新功能
######當重寫一個方法和介面時,其參數類型是可省略的。這遵從了里氏平衡原則的參數類型的逆變。 ######
允許繼承後的抽象類別來重寫被繼承的抽象類別的抽象方法。
允許分組命名空間的尾部逗號。
物件類型的註解是允許的。
DBA
實現了對LMDB後端的支援。
JSON
在json_encode()和json_decode()增加了對JSON_INVALID_IGNORE和JSON_INVALTD_UTF8_SUBSTITUTE的支持,取代了先前的utf-8編碼的無效型別。
OCI8
增加了Oracle資料庫的透明應用故障切換(TAF)的支援。
PCRE
增加了內部選項(j)修改本地的PCRE_DUPNAMES選項。
Sodium
新的加密擴充。
SQLite3
實現了寫入BLOBs。
Standard
#當使用libargon2來編譯PHP時,簡化的雜湊密碼的API已更新,用來支援Argon2。
windows平台支援proc_nice()函數。
Zip
讀/寫入加密存檔,依賴libzip 1.2.0, 新的方法: ZipArchive:: setEncryptionName($ name,$ method ,$ password]); 新的常數: ZipArchive:: EM_NONE Zip ipArchive:: EM_AES_256
從zip流上下文接受"密碼"。
ZipArchive實作可計數,增加ZipArchive::count()#方法。
3. SAPI模組變更
4. 廢棄的功能
以下是將要在php8.0版本中廢棄的功能。
Core
#設定檔的磁軌錯誤將會被廢棄。
__autoload()將被廢棄,使用spl_autoload_register() 來替代。
(unset)將被廢棄,此項目變更不會影響unset ($var)的語言結構。
#create_function()函數將被廢棄,並使用匿名函數來取代。
each()函數結構將被廢棄,使用foreach()循環來替代。
Exif
read_exif_data ()將被廢棄,使用exif_read_data()#來取代。
GD
#png2wbmp()#和jpeg2wbmp()將會被廢棄。
GMP
gmp_random ()將被廢棄,使用gmp_random_bits()或()來取代。
Intl
INTL_IDNA_VARIANT_2003 將被廢棄,使用INTL_IDNA_VARIANT_UTS46來取代。
Mbstring
mbstring .func_overload的設定檔將被廢棄。
Standard
#參數來呼叫parse_str()將會被廢棄。
用字串參數來呼叫assert()將被廢棄,並使用常規表達式來取代。
5. 變更的函數
Standard
當設定為PASSWORD_ARGON2I時,password_hash()可以產生Argon2散列。
當使用PASSWORD_ARGON2I時,以下這些選項可能預設被設定:memory_cost ,time_cost。這些選項的預設值是PASSWORD_ARGON2_DEFAULT_MEMORY_COST。如果沒有設置,則預設是PASSWORD_ARGON2_DEFAULT_TIME_COST和PASSWORD_ARGON2_DEFAULT_THREADS。
#password_verify()可以驗證Argon2雜湊。
#password_get_info()和password_needs_rehash()可以接受Argon2哈希值。
mail()/mb_send_mail()接受陣列$extra_header 。數組參數是針對RFC 2822進行檢查的。 陣列格式: php $extra_headers = [ 'Header-Name' => 'Header value', 'Multiple' => ['One header','Another header'], 'Multiline' = " FirstLine\r\n SecondLine", ];
#當傳遞一個無效參數時,count() 函數將拋出warning警告。
大端和小端的位元組序列下,pack()和 unpack()支援float和double型別。
number_format()函數將確保零值不包含負號。
XML
utf8_encode ()和utf8_decode() 函數已被當作字串移至標準擴充。
6. 新增的函數
Core
增加stream_istty()。
#增加sapi_windows_vt100_support()。
DOM
DomNodeList 實作了Countable,增加了DomNodeList::count()#。
DOMNamedNodeMap實作了Countable,增加了DOMNamedNodeMap :: count()。
FTP
#增加了ftp_append()。
GD
#增加了imagesetclip()和imagegetclip()。
增加了imageopenpolygon()。
增加了#imageresolution()。
增加了#imagecreatefrombmp()和imagebmp( )。
Hash
#增加了hash_hmac_algos()。
Mbstring
增加了mb_chr()和mb_ord()。
增加了#mb_scrub。
OCI8
增加了oci_register_taf_callback()和oci_unregister_taf_callback()對Oracle資料庫的透明應用故障切換(TAF)的支援。
Sockets
增加了socket_addrinfo_lookup(),socket_addrinfo_connect(),socket_addrinfo_bind()和#socket_addrinfo_bind()和
。
SPL
增加了#。
7. 新增的類別與介面
8. 移除的擴充與SAPI
Mcypt
#已廢棄的mcrypt擴充已移至PECL。
9. 其他對擴充功能的變更
##EXIF
#增加了對以下格式的exif標籤支援:Samsung,DJI,Panasonic,Sony,Pentax,Minolta,Sigma/Foveon, AGFA,Kyocera,Ricoh & Epson。exif_read_data()
exif_t humbnail()支援第一個參數是傳遞流。
#。除了
設定選項。
將truecolor影像儲存為真彩色影像,取代了先前的轉換為調色板。
mageantialias()也支援。
Mbstring
######mb_check_encoding ()######接受陣列參數,遞迴檢查其鍵和值。 ########################mb_convert_encoding()######接受陣列參數,其值的編碼可以遞歸地轉換。 ######PDO_OCI
--with-pdo-oci 的設定語法將不再Oracle客戶端。
pdo_sqlite
使用sqlite3_prepare_v2()和sqlite3_close_v2()來取代他們之前的函數。
10. 新增全域常數
Core
PHP_FLOAT_DIG
##PHP_FLOAT_EPSILON
#PHP_FLOAT_MIN
#PHP_FLOAT_MAX
#PHP_OS_FAMILY
Fileinfo
FILEINFO_EXTENSION
GD
IMG_EFFECT_MULTIPLY
IMG_BMP
PCRE
PREG_UNMATCHED_AS_NULL
Standard:
PASSWORD_ARGON2_DEFAULT_TIME_COST
#PASSWORD_ARGON2_DEFAULT_TIME_COST#PASSWORD_ARGON2_DEFAULT_TIME_COST
#PASSWORD_ARGON2I
#11. INI檔案處理的變更
sql.safe_mode
該INI選項已移除。
realpath_cache_size
#預設是4096k。
opcache.fast_shutdown
該INI選項已經移除。 fast_shutdown處理的一種變型已經被整合到PHP內核,在生產環境中將預設為開啟。
12. Windows支援
支援VT100控制台模式。