函數(shù)重載功能

警告

本特性自 PHP 7.2.0 起廢棄,并且自 PHP 8.0.0 起被移除。 強烈建議不要使用本特性。

你也許常常會發(fā)現(xiàn)現(xiàn)存的 PHP 應(yīng)用很難運行在多字節(jié)環(huán)境下。 發(fā)生這種情況的原因是大多數(shù)那種 PHP 應(yīng)用使用了標準的字符串函數(shù),類似 substr(),已知無法處理多字節(jié)編碼的字符串。

mbstring 支持一個“函數(shù)重載”功能,將對應(yīng)的多字節(jié)版本重載到標準字符處理函數(shù)上,例如你能夠讓這類應(yīng)用在不修改代碼的前提下添加多字節(jié)的處理能力。 比如,啟用函數(shù)重載后,mb_substr() 將會代替 substr() 被調(diào)用。 在很多情況下這個功能允許讓僅支持單字節(jié)編碼的應(yīng)用簡單地和多字節(jié)環(huán)境對接。

要使用函數(shù)重載功能,設(shè)置 php.ini 里的 mbstring.func_overload 為正值,就是表示為重載函數(shù)分類的位掩碼組合。 要重載 mail() 函數(shù)需要設(shè)置它為 1。字符串函數(shù)設(shè)置為 2,正則表達式函數(shù)為 4。 例如,當它設(shè)置為 7, mail、strings 和 正則表達式函數(shù)將都會被重載。 以下列表顯示了重載的函數(shù)。

被重載的函數(shù)
mbstring.func_overload 的值 原始函數(shù) 重載后的函數(shù)
1 mail() mb_send_mail()
2 strlen() mb_strlen()
2 strpos() mb_strpos()
2 strrpos() mb_strrpos()
2 substr() mb_substr()
2 strtolower() mb_strtolower()
2 strtoupper() mb_strtoupper()
2 stripos() mb_stripos()
2 strripos() mb_strripos()
2 strstr() mb_strstr()
2 stristr() mb_stristr()
2 strrchr() mb_strrchr()
2 substr_count() mb_substr_count()

注意:

不推薦每個目錄的范圍(context)內(nèi)使用函數(shù)重載選項,因為還無法確定在生產(chǎn)環(huán)境中是否穩(wěn)定,也許會導(dǎo)致不確定的行為。