php7 参数、整形及字符串处理机制修改实例分析
作者:人生如初见_张默 发布时间:2023-11-23 19:48:31
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/qq_42176520/article/details/87166148


猜你喜欢
- 最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容。如果有这样一个程序,可以把各大视频网站的热门用户最新发布的视频都下载下来
- 用法:matplotlib.pyplot.stem(*args, linefmt=None, markerfmt=None, basefmt
- 我就废话不多说了,大家还是直接看代码吧~type Animal struct { ID int64 Name string `gorm:&q
- numpy.insert()主要用于向矩阵中插入行或列。对于多维矩阵,可以沿任意一个轴插入元素。1. 参数说明numpy.insert(ar
- 前言最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完成课程设
- 如下所示:from statsmodels.tsa.stattools import adfullerprint(adfuller(data
- 代码如下:<% '功能:取得文件扩展名 Function getFileExt(sFileNam
- 在用pymysql操作数据库的过程中,给sql语句传参碰到了很多问题,网上传参策略很多,这里推荐两种单个传参用%s,写起来比较简单:fiel
- 对于日期的操作可以说是比较常见的case了,日期与格式化字符串互转,日期与时间戳互转,日期的加减操作等,下面主要介绍下常见的需求场景如何实现
- 我们了解到gin可用通过类似DefaultQuery或DefaultPostForm等方法获取到前端提交过来的参数。参数不多的情况下也很好用
- 详解Python MD5加密Python 3下MD5加密# 由于MD5模块在python3中被移除# 在python3中使用hashlib模
- GoLang之使goroutine停止的5种方法1.goroutine停止介绍goroutine是Go语言实现并发编程的利器,简单的一个指令
- 算法思路1、求取源图I的平均灰度,并记录rows和cols;2、按照一定大小,分为N*M个方块,求出每块的平均值,得到子块的亮度矩阵D;3、
- webconfig配置:<connectionStrings> <add name="MS
- 本文为大家分享了python数据分析数据标准化及离散化的具体内容,供大家参考,具体内容如下标准化1、离差标准化是对原始数据的线性变换,使结果
- 上下文代码smart_girl = {"name":"yuan wai", "age&qu
- 分析我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器。如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__ite
- 问题:我在 Vue 中有一个 form 表单,用于上传博客帖子,它有标题、正文、描述、片段和图片等范围。所有的一切都是必需的。我在 Expr
- 1、问题描述:在学习北京大学曹健老师的tensorflow2.0笔记的时候,遇到了[Errno 2] No such file or dir
- 编者按,网站中让人惊喜的往往是那一点细节,只要用心留意你将发现那些美好的用户体验就在身边。新蛋网想自主控制链接在原窗口还是新窗口中打开?看看