有了一些新關鍵字。
strrpos() 和 strripos()
如今使用整個字串作為 needle。
非法使用字串偏移量會導致 E_ERROR 而不是
E_WARNING。一個非法使用的例子:$str = 'abc'; unset($str[0]);.
array_merge() 被改成只接受陣列。若果傳遞入非陣列變量,對每個此類參數都會發出一條
E_WARNING 訊息。要小心因為你的代碼有可能瘋狂發出
E_WARNING。
PATH_TRANSLATED 伺服器變量在 Apache2 SAPI 中不再暗中設定,這和 PHP 4
中的情形相反,若果 Apache 沒產生此值則其被設為和
SCRIPT_FILENAME 伺服器變量一樣的值。此修改是為了遵守
CGI 規範。更多訊息見 bug #23610,並參考手冊中
$_SERVER['PATH_TRANSLATED']
的說明。此問題也影響到 PHP >= 4.3.2 的版本。
Tokenizer 增加不再定義
T_ML_COMMENT 常量。若果把
error_reporting 設為 E_ALL,PHP
將產生一條訊息。儘管 T_ML_COMMENT
從來都沒用到過,還是在 PHP 4 中定義了。在 PHP 4 和 PHP 5
中 // 和 /* */ 都被解析為 T_COMMENT
常量。但是 PHPDoc 風格的注解 /** */,自 PHP 5 開始被
PHP 解析,被識別為 T_DOC_COMMENT。
若果 variables_order
內含「S」,$_SERVER 應該帶有 argc 和 argv 被產生。若果會員特別配製系統不建立
$_SERVER,那此變量當然就不存在了。改變的地方是不管 variables_order 怎麼設定,在
CLI 版本中 argc 和 argv 總是可用的。本來 CLI
版不是總會產生全局變量 $argc 和 $argv 的。
沒有屬性的對象不再被當成「empty」。
有些情況下類必須在使用前被定義。這僅在使用了一些 PHP 5
的新特性的時候發生。其它情況下行為都沒變。
get_class(),get_parent_class()
和 get_class_methods()
如今返回的類/方法名和定義時的名字一致(區分大小寫),對於依賴以前行為(類/方法名總是返回小寫的)的老腳本可能產生問題。一個可能的解決方法是在腳本中搜尋所有這些函數並使用
strtolower()。
區分大小寫的改變也適用於魔術常量
__CLASS__,__METHOD__
和 __FUNCTION__。其值都會嚴格按照定義時的名字返回(區分大小寫)。
ip2long() 在傳遞入一個非法
IP 作為參數時返回 FALSE,不再是
-1。
若果在包括檔案中定義有函數,則不管在 return()
之前還是之後都可以在主檔案中呼叫。若果檔案被包括兩次,PHP 5
會發出致命錯誤,因為函數已經被定義,而 PHP 4
不管這個。因此推薦使用 include_once()
而不要去檢查檔案是否已被包括以及在包括檔案中有條件返回。
include_once() 和 require_once()
在 Windows 下先將路徑規格化,因此包括
A.php 和 a.php 只會把檔案包括一次。