php7 参数、整形及字符串处理机制修改实例分析


Posted in PHP onMay 25, 2020

本文实例讲述了php7 参数、整形及字符串处理机制修改。分享给大家供大家参考,具体如下:

参数处理机制修改

一、重复参数命名不再支持。

重复的参数命名不再支持。比如下面的代码执行的时候会报错:

public function foo($a, $b, $unused, $unused) {
// ... 
}

编者按:应该没有人这样用吧。

二、func_get_arg和func_get_args()调整

func_get_arg()和func_get_args()这两个方法返回参数当前的值,而不是传入时的值。当前的值有可能会被修改  

function foo($x) {
   $x++;
   var_dump(func_get_arg(0));
}
foo(1);

上面的代码会打印2, 而不是1。如果想打印原始的值,调用的顺序调整下即可。

三、同样在打印异常回溯信息的时候也是显示修改后的值。

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的数字)会报编译错误,比如下面的代码会报错:     

$i = 0781; // 8 is not a valid octal digit!
[点击并拖拽以移动]

老版本的PHP会把无效的数字忽略。

二、位移负的位置会产生异常

var_dump(1 >> -1); // ArithmeticError: Bit shift by negative number

三、左位移如果超出位数返回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)   (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函数来检查一个字符串是否包含十六进制字符或者是否可以转成一个整型

$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字符,会报错:

$str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequence

可以通过对第一个\进行转义来避免这种错误。

$str = "\\u{xyz}"; // Works fine

“\u”后面如果没有{,则没有影响:

$str = "\u202e"; // Works fine

PHP IntlChar()

PHP 7 通过 intl 扩展来支持国际化 (i18n) 和本地化 (l10n) 。此扩展仅仅是对 ICU 库的基础包装,并提供了和 ICU 库类似的方法和特性。

PHP 7 通过新的 IntlChar 类暴露出 ICU 中的 Unicode 字符特性。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。

实例

<?php 
printf('%x', IntlChar::CODEPOINT_MAX); 
echo IntlChar::charName('@'); 
var_dump(IntlChar::ispunct('!')); 
?>

以上程序执行输出结果为:

10ffff
COMMERCIAL AT
bool(true)

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
PHP循环结构实例讲解
Feb 10 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
php UNIX时间戳用法详解
Feb 16 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
php7 错误处理机制修改实例分析
May 25 #PHP
php7 list()、session及其他模块的修改实例分析
May 25 #PHP
php7 新增功能实例总结
May 25 #PHP
PHP强制转化的形式整理
May 22 #PHP
Yii 框架入口脚本示例分析
May 19 #PHP
Yii 框架使用数据库(databases)的方法示例
May 19 #PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 #PHP
You might like
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
Python实现的简单模板引擎功能示例
2017/09/02 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
Python内存管理实例分析
2019/07/10 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
公司财务自我评价分享
2013/12/17 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
物流业务员岗位职责
2014/02/08 职场文书
作风建设演讲稿
2014/05/23 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
雷峰塔导游词
2015/02/09 职场文书
关于迟到的检讨书
2015/05/06 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
Win11 BitLocker 驱动器加密
2022/04/19 数码科技