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 相关文章推荐
程序员编程十条戒律
Jul 09 PHP
php 分库分表hash算法
Nov 12 PHP
php引用返回与取消引用的详解
Jun 08 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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/01/29 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
php中strtotime函数性能分析
2016/11/20 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中的作用域规则详解
2015/01/30 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
初三家长会邀请函
2014/01/18 职场文书
2014年学生会工作总结
2014/11/07 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
Redis高并发缓存架构性能优化
2022/05/15 Redis