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函数
Oct 09 PHP
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
ADODB的数据库封包程序库
Dec 31 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHP获取url的函数代码
Aug 02 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
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
smarty section简介与用法分析
2008/10/03 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python实现简单多人聊天室
2018/12/11 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
如何在python中实现随机选择
2019/11/02 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
爱情检讨书大全
2014/01/21 职场文书
总经理助理职责
2014/02/04 职场文书
秸秆管理实施方案
2014/03/15 职场文书
公司周年庆典标语
2014/10/07 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python