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 相关文章推荐
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
一个简单的PHP&amp;MYSQL留言板源码
Jul 19 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
php文件上传的简单实例
Oct 19 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
php实现登陆模块功能示例
Oct 20 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
php curl优化下载微信头像的方法总结
Sep 07 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
服务器端解压缩zip的脚本
2006/12/22 PHP
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
js实现内置计时器
2019/12/16 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
TensorFlow损失函数专题详解
2018/04/26 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
十佳教师事迹材料
2014/01/11 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
仓管岗位职责范本
2014/02/08 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
初中学生操行评语
2014/12/26 职场文书
小学安全教育主题班会
2015/08/12 职场文书