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抽象工厂模式(Elgg)
Mar 21 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
smarty中post用法实例
Nov 28 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
php读取csc文件并输出
May 21 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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图形计数器程序显示网站用户浏览量
2016/07/20 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
python调用cmd复制文件代码分享
2013/12/27 Python
Python中Collection的使用小技巧
2014/08/18 Python
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python 爬虫的工具列表大全
2016/01/31 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python3.x实现base64加密和解密
2019/03/28 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
Python requests接口测试实现代码
2020/09/08 Python
详解Python中import机制
2020/09/11 Python
文明礼仪标语
2014/06/13 职场文书
公司合作协议范文
2014/10/01 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
工作表现证明
2015/06/15 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android