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 mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
smarty缓存用法分析
Dec 16 PHP
yii分页组件用法实例分析
Dec 28 PHP
php简单实现批量上传图片的方法
May 09 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
PHP session垃圾回收机制实例分析
Jun 28 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
php 浮点数比较方法详解
2017/05/05 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
python装饰器decorator介绍
2014/11/21 Python
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
python 剪切移动文件的实现代码
2018/08/02 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
自动化专业毕业生自荐信
2013/11/01 职场文书
实习单位接收函模板
2014/01/10 职场文书
家长对小学生的评语
2014/01/28 职场文书
购房协议书
2014/04/11 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
2015年手术室工作总结
2015/05/11 职场文书
资产移交协议书
2016/03/24 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫