php自增运算,PHP 中「自增、自减」运算引发的奇怪问题

PHP 中「自增、自减」运算引发的奇怪问题

在 PHP 的官方手册中写道:

PHP 支持 C 风格的前/后递增与递减运算符。

6bc9a8c887878e62b259d5c209de3203.png

第一个注意事:递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是1。

换句话说:递增/递减运算中,不会把操作数转换成整数后再运算。如果运算数是布尔值,则直接返回结果。

递增/递减布尔值:

$a = TRUE;

var_dump(++$a); // bool(true)

$a = TRUE;

var_dump(--$a); // bool(true)

$b = FALSE;

var_dump(++$b); // bool(false)

$b = FALSE;

var_dump(--$b); // bool(false)

递增/递减NULL:

$a = NULL;

var_dump(++$a); // int(1)

$a = NULL;

var_dump(--$a); // NULL

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。

例如,在 Perl 中

$a = 'Z';

$a++;

将把$a变成'AA',而在 C 中,

a = 'Z';

a++;

将把a变成'['('Z'的 ASCII 值是90,'['的 ASCII 值是91)。

注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。

例如:

$a="9D9";

var_dump(++$a); // string(3) "9E0"

但是,这里又有一个陷阱了:

$a="9E0";

echo ++$a; // 10

安装上面的规则,应该输出9E1,但是这里却输出了10。WTF?

如果我们这么写,大部人就知道是为什么了。

$a = "9E0";

var_dump(++$a); // float(10)

$a的类型是浮点型,也就是说,9E0是浮点数的科学记数法,即9 * 10^0 = 9,对9自增,结果当然是10了。(参考:字符串转换为数值)

现在问题又来了:

$l = "Z99";

$l++;

这个结果是多少呢?结果按照 perl 语言的规则,是"AA00"。

还有一个注意事项:

递增/递减其他字符变量则无效,原字符串没有变化。

这个就不解释了。

最后一个注意事项:

$a = '012';

$a++;

var_dump($a);

这个结果是'013'?13?11?

这段的结果是int(13),字符串'012'并没有被当作八进制。

$a = 012; // 八进制,十进制为 10

$b = "012"; // 转换为整数为十进制 12

如果是0x开头的呢?

$a = '0x1A';

$a++;

var_dump($a); // int(27)

WTF!居然不按套路出牌。0开头的不被认为是八进制,但是0x开头的却被认为是十六进制。

在 PHP 官方文档中Integer 整型还有另一个八进制陷阱:

var_dump(01090); // 八进制 010 = 十进制 8

手册中对此的解释为:

Warning

如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。

综上,PHP 不愧是世界上「最好」的语言。

没有之一。

PHP 中「自增、自减」运算引发的奇怪问题 相关文章

学习和使用 PHP 应该注意的10件事

1多阅读手册和源代码 没什么比阅读手册更值得强调的事了仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数。就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发现在以往的项目开发过程中,很多时候你在重复发明

如何在Linux服务器中隐藏PHP版本

通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP。PHP 是如今流行的服务端html嵌入式语言(之一?)。在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞。因此,我会简单描述如何在Linux服务器中隐藏PHP信息。 默认上 e

PHP 5.5 / PHP5.6 / PHP-NG 和 HHVM 哪个性能更好

摘要:在一个基于Vagrant的本地环境中,可能是某个错误的原因,导致HHVM测试结果很差;在HHVM伙伴们协助下,该原因仍在研究中!然而,在DigitalOcean的一个4GB虚拟机中,HHVM甚至盖过了最新版的PHP-NG的风头! 结论:它们反映出HHVM的功效更佳(在JIT热启动

PHP 实现四种基本排序算法

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法

PHP优化杂烩

讲 PHP 优化的文章往往都是教大家如何编写高效的代码,本文打算从另一个角度来讨论问题,教大家如何配置高效的环境,如此同样能够达到优化的目的。 pool 一个让人沮丧的消息是绝大多数 PHP 程序员都忽视了池的价值。这里所说的池可不是指数据库连接池之类的

在 CentOS 7.x / Fedora 21 上面体验 PHP 7.0

PHP是一种为我们熟知的通用服务器网页脚本语言。非常多的在线网站都是用PHP编写的。PHP这些年来一直在持续进化,丰富其功能,变得易于使用,更好地组织的脚本语言。目前PHP的开发团队正筹备下一个PHP版本的发行,名字是PHP 7。现在的PHP版本为PHP 5.6,可能

Docker 在 PHP 项目开发环境中的应用

环境部署是所有团队都必须面对的问题,随着系统越来越大,依赖的服务也越来越多,比如我们目前的一个项目就会用到: Web服务器:NginxWeb程序:PHP + Node数据库:MySQL搜索引擎:ElasticSearch队列服务:Gearman缓存服务:Redis + Memcache前端构建工具:np

PHP 7.0 升级备注

PHP 7.0.0 beta1 发布了,在带来了引人注目的性能提升的同时,也带来了不少语言特性方面的改变。以下由 LCTT 翻译自对官方的升级备注,虽然目前还不是正式发布版,不过想必距离正式发布的特性已经差别不大了。(本文会持续追踪更新) 1. 向后不兼容的变化语

PHP 安全编程建议

简介 要提供互联网服务,当你在开发代码的时候必须时刻保持安全意识。可能大部分 PHP 脚本都对安全问题都不在意,这很大程度上是因为有大量的 无经验程序员 在使用这门语言。但是,没有理由让你因为对你的代码的不确定性而导致不一致的安全策略。当你在服务

在 Linux 命令行中使用和执行 PHP 代码(二)12 个 PHP 交互性 shell 的用法

在上一篇文章在 Linux 命令行中使用和执行 PHP 代码(一)中,我同时着重讨论了直接在Linux命令行中运行PHP代码以及在Linux终端中执行PHP脚本文件。 本文旨在让你了解一些相当不错的Linux终端中的PHP交互性 shell 的用法特性。 让我们先在PHP 的交互shell中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值