目錄
- 參數(shù)處理機(jī)制修改
- 一、重復(fù)參數(shù)命名不再支持。
- 二、func_get_arg和func_get_args()調(diào)整
- 三、同樣在打印異?;厮菪畔⒌臅r(shí)候也是顯示修改后的值。
- 整型處理機(jī)制修改
- 一、無效八進(jìn)制數(shù)字會(huì)報(bào)編譯錯(cuò)誤
- 二、位移負(fù)的位置會(huì)產(chǎn)生異常
- 三、左位移如果超出位數(shù)返回0
- 四、右位移超出會(huì)返回0或者-1.
- 字符串處理機(jī)制修改
- 一、含有十六進(jìn)制字符的字符串不再視為數(shù)字
- 二、\u{后面如果包含非法字符會(huì)報(bào)錯(cuò)
- PHP IntlChar()
本文實(shí)例講述了php7 參數(shù)、整形及字符串處理機(jī)制修改。分享給大家供大家參考,具體如下:
參數(shù)處理機(jī)制修改
一、重復(fù)參數(shù)命名不再支持。
重復(fù)的參數(shù)命名不再支持。比如下面的代碼執(zhí)行的時(shí)候會(huì)報(bào)錯(cuò):
public function foo($a, $b, $unused, $unused) {
// ...
}
編者按:應(yīng)該沒有人這樣用吧。
二、func_get_arg和func_get_args()調(diào)整
func_get_arg()和func_get_args()這兩個(gè)方法返回參數(shù)當(dāng)前的值,而不是傳入時(shí)的值。當(dāng)前的值有可能會(huì)被修改
function foo($x) {
$x++;
var_dump(func_get_arg(0));
}
foo(1);
上面的代碼會(huì)打印2, 而不是1。如果想打印原始的值,調(diào)用的順序調(diào)整下即可。
三、同樣在打印異常回溯信息的時(shí)候也是顯示修改后的值。
function foo($x) {
$x = 42;
throw new Exception;
}
foo("string");
PHP7的運(yùn)行結(jié)果:
Stack trace:
#0 file.php(4): foo(42)
#1 {main}
PHP5的運(yùn)行結(jié)果:
Stack trace:
#0 file.php(4): foo('string')
#1 {main}
這個(gè)調(diào)整不會(huì)影響代碼的行為,不過在調(diào)試的時(shí)候需要注意這個(gè)變化。
其他和參數(shù)有關(guān)的函數(shù)都是同樣的調(diào)整,比如debug_backtrace() .
整型處理機(jī)制修改
一、無效八進(jìn)制數(shù)字會(huì)報(bào)編譯錯(cuò)誤
無效的八進(jìn)制數(shù)字(包含大于7的數(shù)字)會(huì)報(bào)編譯錯(cuò)誤,比如下面的代碼會(huì)報(bào)錯(cuò):
$i = 0781; // 8 is not a valid octal digit!
[點(diǎn)擊并拖拽以移動(dòng)]
老版本的PHP會(huì)把無效的數(shù)字忽略。
二、位移負(fù)的位置會(huì)產(chǎn)生異常
var_dump(1 >> -1); // ArithmeticError: Bit shift by negative number
三、左位移如果超出位數(shù)返回0
var_dump(1 64); // int(0)
老版本的PHP運(yùn)行結(jié)果和cpu架構(gòu)有關(guān)系。比如x86會(huì)返回1。
四、右位移超出會(huì)返回0或者-1.
var_dump(1 >> 64); // int(0)
var_dump(-1 >> 64); // int(-1)
字符串處理機(jī)制修改
一、含有十六進(jìn)制字符的字符串不再視為數(shù)字
含有十六進(jìn)制字符的字符串不再視為數(shù)字,也不再區(qū)別對(duì)待。比如下面的代碼:
var_dump("0x123" == "291"); // bool(false) (previously true)
var_dump(is_numeric("0x123")); // bool(false) (previously true)
var_dump("0xe" + "0x1"); // int(0) (previously 16)
var_dump(substr("foo", "0x1")); // string(3) "foo" (previously "oo")
// Notice: A non well formed numeric value encountered
可以使用filter_var函數(shù)來檢查一個(gè)字符串是否包含十六進(jìn)制字符或者是否可以轉(zhuǎn)成一個(gè)整型
$str = "0xffff";
$int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
if (false === $int) {
throw new Exception("Invalid integer!");
}
var_dump($int); // int(65535)
二、\u{后面如果包含非法字符會(huì)報(bào)錯(cuò)
雙引號(hào)和heredocs語法里面增加了unicode 碼點(diǎn)轉(zhuǎn)義語法,“\u{”后面必須是utf-8字符。如果是非utf-8字符,會(huì)報(bào)錯(cuò):
$str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequence
可以通過對(duì)第一個(gè)\進(jìn)行轉(zhuǎn)義來避免這種錯(cuò)誤。
$str = "\\u{xyz}"; // Works fine
“\u”后面如果沒有{,則沒有影響:
$str = "\u202e"; // Works fine
PHP IntlChar()
PHP 7 通過 intl 擴(kuò)展來支持國際化 (i18n) 和本地化 (l10n) 。此擴(kuò)展僅僅是對(duì) ICU 庫的基礎(chǔ)包裝,并提供了和 ICU 庫類似的方法和特性。
PHP 7 通過新的 IntlChar 類暴露出 ICU 中的 Unicode 字符特性。這個(gè)類自身定義了許多靜態(tài)方法用于操作多字符集的 unicode 字符。
實(shí)例
?php
printf('%x', IntlChar::CODEPOINT_MAX);
echo IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));
?>
以上程序執(zhí)行輸出結(jié)果為:
10ffff
COMMERCIAL AT
bool(true)
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php常用函數(shù)與技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- PHP常用字符串函數(shù)用法實(shí)例總結(jié)
- php生成隨機(jī)數(shù)/生成隨機(jī)字符串的方法小結(jié)【5種方法】
- php字符串函數(shù) str類常見用法示例
- php變量與字符串的增刪改查操作示例
- PHP數(shù)組與字符串互相轉(zhuǎn)換實(shí)例
- php將字符串轉(zhuǎn)換為數(shù)組實(shí)例講解
- php反序列化長度變化尾部字符串逃逸(0CTF-2016-piapiapia)
- PHP字符串與數(shù)組處理函數(shù)用法小結(jié)
- PHP生成隨機(jī)字符串實(shí)例代碼(字母+數(shù)字)
- PHP中將一個(gè)字符串部分字符用星號(hào)*替代隱藏的實(shí)現(xiàn)代碼
- php常用經(jīng)典函數(shù)集錦【數(shù)組、字符串、棧、隊(duì)列、排序等】
- PHP入門學(xué)習(xí)之字符串操作