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 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
May 16 PHP
php Smarty 字符比较代码
Feb 27 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
PHP计数器的实现代码
Jun 08 PHP
在Win7 中为php扩展配置Xcache
Oct 08 PHP
php使用递归计算文件夹大小
Dec 24 PHP
phplot生成图片类用法详解
Jan 06 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
PHP 传输会话curl函数的实例详解
Sep 12 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
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
python修改操作系统时间的方法
2015/05/18 Python
python实现红包裂变算法
2016/02/16 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
python中reader的next用法
2018/07/24 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
python中round函数保留两位小数的方法
2020/12/04 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
新闻专业推荐信范文
2013/11/20 职场文书
党员个人总结自评
2015/02/14 职场文书
房贷工资证明范本
2015/06/12 职场文书
小学运动会加油稿
2015/07/22 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
新学期开学寄语2016
2015/12/04 职场文书
小学班级管理心得体会
2016/01/07 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android