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全概率运算函数(优化版) Webgame开发必备
Jul 04 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
实现获取http内容的php函数分享
Feb 16 PHP
ThinkPHP页面跳转success与error方法概述
Jun 25 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
WordPress中使主题支持小工具以及添加插件启用函数
Dec 22 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 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
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
Django中URLconf和include()的协同工作方法
2015/07/20 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
联欢晚会主持词
2014/03/25 职场文书
婚纱店策划方案
2014/05/22 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
五一劳动节活动总结
2015/02/09 职场文书
团队拓展训练感想
2015/08/07 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
python实现简易名片管理系统
2021/04/11 Python