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 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
php+mysql 实现身份验证代码
Mar 24 PHP
php将数据库导出成excel的方法
May 07 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 PHP
PHP7移除的扩展和SAPI
Mar 09 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桌面中心(二) 数据库写入
2007/03/11 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python实现文本文件合并
2015/12/29 Python
python 读写中文json的实例详解
2017/10/29 Python
Python实现常见的回文字符串算法
2018/11/14 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
深入了解python中元类的相关知识
2019/08/29 Python
python动态视频下载器的实现方法
2019/09/16 Python
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
简单说说tomcat的配置
2013/05/28 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
物业电工岗位职责
2013/11/20 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
六五普法规划实施方案
2014/03/21 职场文书
公益广告标语
2014/06/19 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
实习介绍信范文
2015/05/05 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电