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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
Jul 13 PHP
用 Composer构建自己的 PHP 框架之基础准备
Oct 30 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
PHP学习笔记之session
May 06 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
php post换行的方法
Feb 03 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
一些常用的Javascript函数
2006/12/22 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
解读! Python在人工智能中的作用
2017/11/14 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
学生实习推荐信范文
2013/11/26 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
保险公司演讲稿
2014/09/02 职场文书
财务工作失误检讨书
2015/02/19 职场文书