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 相关文章推荐
PHPMailer 中文使用说明小结
Jan 22 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
php实现评论回复删除功能
May 23 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP htmlentities()函数用法讲解
Feb 25 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 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
Zend Framework常用校验器详解
2016/12/09 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python实现定时任务
2017/02/08 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
python实现PID算法及测试的例子
2019/08/08 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
学习新党章思想汇报
2014/01/09 职场文书
导游词之河北邯郸
2019/09/12 职场文书
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
SpringBoot详解执行过程
2022/07/15 Java/Android