php7 参数、整形及字符串处理机制修改实例分析
本文实例讲述了php7参数、整形及字符串处理机制修改。分享给大家供大家参考,具体如下:
参数处理机制修改
一、重复参数命名不再支持。
重复的参数命名不再支持。比如下面的代码执行的时候会报错:
publicfunctionfoo($a,$b,$unused,$unused){ //... }
编者按:应该没有人这样用吧。
二、func_get_arg和func_get_args()调整
func_get_arg()和func_get_args()这两个方法返回参数当前的值,而不是传入时的值。当前的值有可能会被修改
functionfoo($x){ $x++; var_dump(func_get_arg(0)); } foo(1);
上面的代码会打印2,而不是1。如果想打印原始的值,调用的顺序调整下即可。
三、同样在打印异常回溯信息的时候也是显示修改后的值。
functionfoo($x){ $x=42; thrownewException; } foo("string");
PHP7的运行结果:
Stacktrace:
#0file.php(4):foo(42)
#1{main}
PHP5的运行结果:
Stacktrace:
#0file.php(4):foo('string')
#1{main}
这个调整不会影响代码的行为,不过在调试的时候需要注意这个变化。
其他和参数有关的函数都是同样的调整,比如debug_backtrace().
整型处理机制修改
一、无效八进制数字会报编译错误
无效的八进制数字(包含大于7的数字)会报编译错误,比如下面的代码会报错:
$i=0781;//8isnotavalidoctaldigit! [点击并拖拽以移动]
老版本的PHP会把无效的数字忽略。
二、位移负的位置会产生异常
var_dump(1>>-1);//ArithmeticError:Bitshiftbynegativenumber
三、左位移如果超出位数返回0
var_dump(1<<64);//int(0)
老版本的PHP运行结果和cpu架构有关系。比如x86会返回1。
四、右位移超出会返回0或者-1.
var_dump(1>>64);//int(0) var_dump(-1>>64);//int(-1)
字符串处理机制修改
一、含有十六进制字符的字符串不再视为数字
含有十六进制字符的字符串不再视为数字,也不再区别对待。比如下面的代码:
var_dump("0x123"=="291");//bool(false)(previouslytrue) var_dump(is_numeric("0x123"));//bool(false)(previouslytrue) var_dump("0xe"+"0x1");//int(0)(previously16) var_dump(substr("foo","0x1"));//string(3)"foo"(previously"oo") //Notice:Anonwellformednumericvalueencountered
可以使用filter_var函数来检查一个字符串是否包含十六进制字符或者是否可以转成一个整型
$str="0xffff"; $int=filter_var($str,FILTER_VALIDATE_INT,FILTER_FLAG_ALLOW_HEX); if(false===$int){ thrownewException("Invalidinteger!"); } var_dump($int);//int(65535)
二、\u{后面如果包含非法字符会报错
双引号和heredocs语法里面增加了unicode码点转义语法,“\u{”后面必须是utf-8字符。如果是非utf-8字符,会报错:
$str="\u{xyz}";//Fatalerror:InvalidUTF-8codepointescapesequence
可以通过对第一个\进行转义来避免这种错误。
$str="\\u{xyz}";//Worksfine
“\u”后面如果没有{,则没有影响:
$str="\u202e";//Worksfine
PHPIntlChar()
PHP7通过intl扩展来支持国际化(i18n)和本地化(l10n)。此扩展仅仅是对ICU库的基础包装,并提供了和ICU库类似的方法和特性。
PHP7通过新的IntlChar类暴露出ICU中的Unicode字符特性。这个类自身定义了许多静态方法用于操作多字符集的unicode字符。
实例
以上程序执行输出结果为:
10ffff
COMMERCIALAT
bool(true)
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。