PHP是一種流行的通用腳本語言,常用來Web開發(fā),兼容32位與64位架構(gòu),可以穩(wěn)定運轉(zhuǎn)于常見系統(tǒng)之上,能與Apache、IIS等多種服務(wù)器協(xié)同工作,還能連接MySQL、Oracle、PostgreSQL等各類數(shù)據(jù)庫,豐富的擴(kuò)展組件與函數(shù)庫覆蓋多種開發(fā)需求,顯著提升編寫效率,歡迎喜歡的朋友獲取使用。
PHP功能
1、屬性鉤子能夠支持計算屬性,這類屬性可被 IDE 與靜態(tài)分析工具直接識別,不用再編寫可能失效的 docblock 注釋。同時,它們還能可靠地對數(shù)值進(jìn)行預(yù)處理或后處理,省去了檢查類中是否存在對應(yīng) getter 或 setter 的步驟。

2、不對稱可見性如今可分別控制屬性寫入與讀取的作用域,這樣一來,就不用再為了公開屬性數(shù)值卻不讓類外部修改屬性,而編寫復(fù)雜的 getter 方法。

3、全新的 #[\Deprecated] 屬性,讓 PHP 現(xiàn)有的棄用機(jī)制可以應(yīng)用在用戶自己定義的函數(shù)、方法以及類常量上。

4、ext-dom 模塊新增功能并支持 HTML5,新的 DOM API 包含符合標(biāo)準(zhǔn)的 HTML5 文檔解析能力,修正了 DOM 功能長期存在的多個規(guī)范性錯誤,還添加了多個函數(shù),讓文檔處理過程更加簡便。

5、新的 DOM API 可在 Dom 命名空間中調(diào)用,借助這個 API,能通過 Dom\HTMLDocument 和 Dom\XMLDocument 類來創(chuàng)建文檔。
6、BCMath 推出了對象 API,新的 BcMath\Number 對象讓開發(fā)者在處理任意精度數(shù)字時,能采用面向?qū)ο蟮姆绞胶蜆?biāo)準(zhǔn)數(shù)學(xué)運算符。
7、這些 BcMath\Number 對象具有不可變性,并且實現(xiàn)了 Stringable 接口,所以能在字符串場景中使用,比如通過 echo $num 輸出。
8、PHP 新增了 array_find ()、array_find_key ()、array_any () 和 array_all () 這幾個 array_*() 系列函數(shù)。
9、PDO 驅(qū)動程序特定子類 RFC 正式啟用,新的 Pdo\Dblib、Pdo\Firebird、Pdo\MySql、Pdo\Odbc、Pdo\Pgsql 和 Pdo\Sqlite 子類現(xiàn)在可以使用。
10、現(xiàn)在調(diào)用 new MyClass ()->method () 時無需給 new 表達(dá)式添加括號,直接訪問新實例化對象的屬性和方法即可。
二、新的類、接口和函數(shù)
1、PHP 最新版本中加入了延遲對象這一全新類型。
2、基于 IR 框架打造的新 JIT 實現(xiàn)正式上線。
3、新增 request_parse_body () 函數(shù),為數(shù)據(jù)處理提供更多便利。
4、bcceil ()、bcdivmod ()、bcfloor () 和 bcround () 這四個函數(shù)加入到 PHP 函數(shù)庫中。
5、為 round () 函數(shù)新增 RoundingMode 枚舉,其中包含 TowardsZero、AwayFromZero、NegativeInfinity 和 PositiveInfinity 四種新的舍入模式。
6、DateTime 與 DateTimeImmutable 類分別新增方法,DateTime 類添加 DateTime::createFromTimestamp ()、DateTime::getMicrosecond ()、DateTime::setMicrosecond (),DateTimeImmutable 類添加 DateTimeImmutable::createFromTimestamp ()、DateTimeImmutable::getMicrosecond () 和 DateTimeImmutable::setMicrosecond ()。
7、mbstring 擴(kuò)展新增 mb_trim ()、mb_ltrim ()、mb_rtrim ()、mb_ucfirst () 和 mb_lcfirst () 函數(shù),增強(qiáng)字符串處理能力。
8、pcntl 擴(kuò)展添新成員,pcntl_getcpu ()、pcntl_getcpuaffinity ()、pcntl_getqos_class ()、pcntl_setns () 和 pcntl_waitid () 函數(shù)可用于進(jìn)程控制相關(guān)操作。
9、反射相關(guān)類新增方法,ReflectionClassConstant 類添加 ReflectionClassConstant::isDeprecated (),ReflectionGenerator 類添加 ReflectionGenerator::isClosed (),ReflectionProperty 類添加 ReflectionProperty::isDynamic ()。
10、HTTP 與數(shù)學(xué)相關(guān)操作添新函數(shù),新增 http_get_last_response_headers ()、http_clear_last_response_headers () 和 fpow () 函數(shù)。
11、XMLReader 與 XMLWriter 類擴(kuò)展功能,XMLReader 類添加 XMLReader::fromStream ()、XMLReader::fromUri ()、XMLReader::fromString (),XMLWriter 類添加 XMLWriter::toStream ()、XMLWriter::toUri () 和 XMLWriter::toMemory ()。
12、字符串處理再添新工具,新增 grapheme_str_split () 函數(shù),方便處理 grapheme 相關(guān)字符串拆分需求。
三、棄用和向后不兼容
1、IMAP、OCI8、PDO_OCI 和 pspell 這幾個擴(kuò)展已從 PHP 核心中分離,轉(zhuǎn)移到 PECL 倉庫管理。
2、隱式可空參數(shù)類型目前已被標(biāo)記為棄用,后續(xù)版本可能不再支持。
3、使用下劃線 “” 作為類名的做法現(xiàn)已棄用,開發(fā)者需避免此類命名方式。
4、計算零的負(fù)數(shù)次冪的操作現(xiàn)已棄用,執(zhí)行此類運算會觸發(fā)相關(guān)警告。
5、向 round () 函數(shù)傳遞無效模式時,不再只是警告,而是會直接拋出 ValueError 異常。
6、來自 date、intl、pdo、reflection、spl、sqlite、xmlreader 擴(kuò)展的類常量,現(xiàn)在都添加了明確的類型定義。
7、GMP 類如今被定義為 final 類,不允許開發(fā)者創(chuàng)建它的子類。
8、MYSQLI_SET_CHARSET_DIR、MYSQLI_STMT_ATTR_PREFETCH_ROWS、MYSQLI_CURSOR_TYPE_FOR_UPDATE、MYSQLI_CURSOR_TYPE_SCROLLABLE 和 MYSQLI_TYPE_INTERVAL 這些常量已從 PHP 中刪除。
9、mysqli 擴(kuò)展中的部分函數(shù)和方法被棄用,包括 mysqli_ping ()、mysqli_kill ()、mysqli_refresh () 函數(shù),以及 mysqli::ping ()、mysqli::kill ()、mysqli::refresh () 方法,還有 MYSQLI_REFRESH* 系列常量。
10、stream_bucket_make_writeable () 和 stream_bucket_new () 函數(shù)的返回值類型發(fā)生變化,現(xiàn)在返回 StreamBucket 實例,而非之前的 stdClass 對象。
11、exit () 函數(shù)的行為出現(xiàn)變更,在某些場景下的執(zhí)行結(jié)果可能與以往不同。
12、E_STRICT 常量已被標(biāo)記為棄用,后續(xù)開發(fā)中建議使用其他替代方式處理相關(guān)嚴(yán)格模式需求。
PHP特色
1、PHP 內(nèi)置多種實用功能,像文件上傳、密碼認(rèn)證、Cookies 操作、郵件收發(fā)、動態(tài) GIF 生成等都可直接使用。
2、PHP5 能直接與多個數(shù)據(jù)庫建立原生連接,涉及 Oracle、Sybase、Postgres、Mysql、Informix、Dbase、Solid、Access 等,同時完全兼容 ODBC 接口,開發(fā)者更換運行平臺時,無需修改 PHP 代碼就能直接使用。
3、PHP 屬于完全免費的開發(fā)工具,并且支持更多 web server,例如 Zeus、Netscape Enterprise、Apache Win32 module,此外還提升了多項性能表現(xiàn),修復(fù)了大量已知漏洞。
Thread Safe 和 Non Thread Safe怎么選擇
1、PHP 包含兩種服務(wù)模式,分別是 ISAPI 和 FastCGI。其中 ISAPI 服務(wù)模式以 DLL 動態(tài)庫的形式被調(diào)用,在接收用戶請求后執(zhí)行操作,處理完一個用戶請求后不會立即退出,因此需要進(jìn)行線程安全檢查,防止系統(tǒng)資源被耗盡;而 FastCGI 執(zhí)行方式采用單一線程完成操作,不需要進(jìn)行線程安全檢查,去除這一步驟后反而能提升執(zhí)行效率。
2、簡單來說,當(dāng) PHP 以 ISAPI 模式運行服務(wù)時,應(yīng)選擇 Thread Safe(簡稱 ts)版本;當(dāng) PHP 以 FastCGI 模式運行服務(wù)時,需選擇 Non Thread Safe(簡稱 nts)版本。通常情況下,IIS 以 FastCGI 模式運行服務(wù),所以只能選擇 Non Thread Safe 版本;Apache 以 ISAPI 模式運行服務(wù),因此只能選擇 Thread Safe 版本。
更新日志
v8.4.10版本
BcMath
1、修復(fù) GH-18641 錯誤,該錯誤表現(xiàn)為通過引用訪問 BcMath\Number 屬性時會導(dǎo)致程序崩潰。
Core
1、修復(fù)多個錯誤,包括 GH-17711 和 GH-18022(評估已棄用屬性時出現(xiàn)無限遞歸問題),以及 GH-18464(緊急救援過程中未釋放棄用常量的遞歸保護(hù)問題)。
2、修復(fù) GH-18695 問題,該問題表現(xiàn)為 zend_ast_export () 函數(shù)處理浮點數(shù)時無法保留原有數(shù)值。
3、修復(fù) zval_try_get_long () 函數(shù)中引用處理相關(guān)的問題。
4、優(yōu)化 zend_gc 模塊,不再刪除其中的主塊。
5、解決與 zend_alloc 以及部分非默認(rèn)選項相關(guān)的編譯問題。
Curl
1、修復(fù)通過 curl_setopt 設(shè)置列表失敗時出現(xiàn)的內(nèi)存泄漏問題。
Date
1、修復(fù) DatePeriod 迭代器多次調(diào)用 current () 方法時出現(xiàn)的內(nèi)存泄漏問題。
DOM
1、修復(fù) GH-18744 錯誤,該錯誤表現(xiàn)為使用 clone 關(guān)鍵字復(fù)制 HTMLElement 時,classList 無法正常工作。
FPM
1、修復(fù) GH-18662 問題,該問題表現(xiàn)為調(diào)用 fpm_get_status 時發(fā)生段錯誤。