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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
PHP form 表单传参明细研究
Jul 17 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
php实现cookie加密的方法
Mar 10 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
php判断IP地址是否在多个IP段内
Aug 18 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
PHP新手上路(十一)
2006/10/09 PHP
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php生成excel文件的简单方法
2014/02/08 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
在Mac OS上搭建Python的开发环境
2015/12/24 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
Python内存读写操作示例
2018/07/18 Python
详解Python中的路径问题
2020/09/02 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
金士达面试非笔试
2012/03/14 面试题
九州传奇上机题
2014/07/10 面试题
电气自动化自荐信
2013/10/10 职场文书
捐款倡议书范文
2014/02/02 职场文书
大专生求职信
2014/06/29 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android