前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php7 参数、整形及字符串处理机制修改实例分析

php7 参数、整形及字符串处理机制修改实例分析

作者头像
砸漏
发布2020-11-02 11:38:01
5480
发布2020-11-02 11:38:01
举报
文章被收录于专栏:恩蓝脚本

本文实例讲述了php7 参数、整形及字符串处理机制修改。分享给大家供大家参考,具体如下:

参数处理机制修改

一、重复参数命名不再支持。

重复的参数命名不再支持。比如下面的代码执行的时候会报错:

代码语言:javascript
复制
public function foo($a, $b, $unused, $unused) {
// ... 
}

编者按:应该没有人这样用吧。

二、func_get_arg和func_get_args()调整

func_get_arg()和func_get_args()这两个方法返回参数当前的值,而不是传入时的值。当前的值有可能会被修改

代码语言:javascript
复制
function foo($x) {
   $x++;
   var_dump(func_get_arg(0));
}
foo(1);

上面的代码会打印2, 而不是1。如果想打印原始的值,调用的顺序调整下即可。

三、同样在打印异常回溯信息的时候也是显示修改后的值。

代码语言:javascript
复制
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的数字)会报编译错误,比如下面的代码会报错:

代码语言:javascript
复制
$i = 0781; // 8 is not a valid octal digit!
[点击并拖拽以移动]

老版本的PHP会把无效的数字忽略。

二、位移负的位置会产生异常

代码语言:javascript
复制
var_dump(1    -1); // ArithmeticError: Bit shift by negative number

三、左位移如果超出位数返回0

代码语言:javascript
复制
var_dump(1 << 64); // int(0)

老版本的PHP运行结果和cpu架构有关系。比如x86会返回1。

四、右位移超出会返回0或者-1.

代码语言:javascript
复制
var_dump(1    64); // int(0)
var_dump(-1    64); // int(-1)

字符串处理机制修改

一、含有十六进制字符的字符串不再视为数字

含有十六进制字符的字符串不再视为数字,也不再区别对待。比如下面的代码:

代码语言:javascript
复制
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函数来检查一个字符串是否包含十六进制字符或者是否可以转成一个整型

代码语言:javascript
复制
$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字符,会报错:

代码语言:javascript
复制
$str = "\u{xyz}"; // Fatal error: Invalid UTF-8 codepoint escape sequence

可以通过对第一个\进行转义来避免这种错误。

代码语言:javascript
复制
$str = "\u{xyz}"; // Works fine

“\u”后面如果没有{,则没有影响:

代码语言:javascript
复制
$str = "\u202e"; // Works fine

PHP IntlChar()

PHP 7 通过 intl 扩展来支持国际化 (i18n) 和本地化 (l10n) 。此扩展仅仅是对 ICU 库的基础包装,并提供了和 ICU 库类似的方法和特性。

PHP 7 通过新的 IntlChar 类暴露出 ICU 中的 Unicode 字符特性。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。

实例

代码语言:javascript
复制
<?php 
printf('%x', IntlChar::CODEPOINT_MAX); 
echo IntlChar::charName('@'); 
var_dump(IntlChar::ispunct('!')); 
? 

以上程序执行输出结果为:

10ffff COMMERCIAL AT bool(true)

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参数处理机制修改
    • 一、重复参数命名不再支持。
      • 二、func_get_arg和func_get_args()调整
        • 三、同样在打印异常回溯信息的时候也是显示修改后的值。
        • 整型处理机制修改
          • 一、无效八进制数字会报编译错误
            • 二、位移负的位置会产生异常
              • 三、左位移如果超出位数返回0
                • 四、右位移超出会返回0或者-1.
                • 字符串处理机制修改
                  • 一、含有十六进制字符的字符串不再视为数字
                    • 二、\u{后面如果包含非法字符会报错
                      • PHP IntlChar()
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档