本文实例讲述了php7 参数、整形及字符串处理机制修改。分享给大家供大家参考,具体如下:
参数处理机制修改
一、重复参数命名不再支持。
重复的参数命名不再支持。比如下面的代码执行的时候会报错:
1
2
3
|
public function foo( $a , $b , $unused , $unused ) {
// ...
}
|
编者按:应该没有人这样用吧。
二、func_get_arg和func_get_args()调整
func_get_arg()和func_get_args()这两个方法返回参数当前的值,而不是传入时的值。当前的值有可能会被修改
1
2
3
4
5
|
function foo( $x ) {
$x ++;
var_dump(func_get_arg(0));
}
foo(1);
|
上面的代码会打印2, 而不是1。如果想打印原始的值,调用的顺序调整下即可。
三、同样在打印异常回溯信息的时候也是显示修改后的值。
1
2
3
4
5
|
function foo( $x ) {
$x = 42;
throw new Exception;
}
foo( "string" );
|
PHP7的运行结果:
Stack trace:
#0 file.php(4): foo(42)
#1 {main}
PHP5的运行结果:
Stack trace:
#0 file.php(4): foo('string')
#1 {main}
这个调整不会影响代码的行为,不过在调试的时候需要注意这个变化。
其他和参数有关的函数都是同样的调整,比如debug_backtrace() .
整型处理机制修改
一、无效八进制数字会报编译错误
无效的八进制数字(包含大于7的数字)会报编译错误,比如下面的代码会报错:
1
2
|
$i = 0781; // 8 is not a valid octal digit!
[点击并拖拽以移动]
|
老版本的PHP会把无效的数字忽略。
二、位移负的位置会产生异常
1
|
var_dump(1 >> -1); // ArithmeticError: Bit shift by negative number
|
三、左位移如果超出位数返回0
1
|
var_dump(1 << 64); // int(0)
|
老版本的PHP运行结果和cpu架构有关系。比如x86会返回1。
四、右位移超出会返回0或者-1.
1
2
|
var_dump(1 >> 64); // int(0)
var_dump(-1 >> 64); // int(-1)
|
字符串处理机制修改
一、含有十六进制字符的字符串不再视为数字
含有十六进制字符的字符串不再视为数字,也不再区别对待。比如下面的代码:
1
2
3
4
5
|
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函数来检查一个字符串是否包含十六进制字符或者是否可以转成一个整型
1
2
3
4
5
6
|
$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{后面如果包含非法字符会报错
双引号和heredocs语法里面增加了unicode 码点转义语法,“\\u{”后面必须是utf-8字符。如果是非utf-8字符,会报错:
1
|
$str = "\\u{xyz}" ; // Fatal error: Invalid UTF-8 codepoint escape sequence
|
可以通过对第一个\\进行转义来避免这种错误。
1
|
$str = "\\\\u{xyz}" ; // Works fine
|
“\\u”后面如果没有{,则没有影响:
1
|
$str = "\\u202e" ; // Works fine
|
PHP IntlChar()
PHP 7 通过 intl 扩展来支持国际化 (i18n) 和本地化 (l10n) 。此扩展仅仅是对 ICU 库的基础包装,并提供了和 ICU 库类似的方法和特性。
PHP 7 通过新的 IntlChar 类暴露出 ICU 中的 Unicode 字符特性。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。
实例
1
2
3
4
5
|
<?php
printf( '%x' , IntlChar::CODEPOINT_MAX);
echo IntlChar::charName( '@' );
var_dump(IntlChar::ispunct( '!' ));
?>
|
以上程序执行输出结果为:
10ffff
COMMERCIAL AT
bool(true)
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/qq_42176520/article/details/87166148
相关文章
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-29 38
-
2025-06-04 43
-
2025-05-29 15
-
asp.net实现上传图片时判断图片的模式GRB或CMYK的方法
2025-05-29 44 -
2025-05-25 67