PHP-php 中 bool类型的变量 ++ 为什么没有被强制转换为int?

PHP-php 中 bool类型的变量 ++ 为什么没有被强制转换为int?

虐人心 发布于 2017-04-05 字数 207 浏览 1273 回复 5

以前总以为 ++ 与 +=1 完全一样(排除优先级),都会给变量自身进行加 1 的操作:

如下:

$a = 1; $a++;  echo $a;

$a = 1; $a+=1; echo $a;

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

偏爱自由 2017-08-29 5 楼

每种语言在变量的类型转换上都有各自不同的地方,弱类型语言(php)在类型转换上尤为灵活(复杂)。
楼主说的 ++操作为什么不会将 bool强制转换为int类型 我觉得应该是是由php开发组自己设定的。
就像js,虽然是弱类型,但是在switch匹配中 却不会自动转换变量类型,但是php中的switch会自动转换匹配。
php是由c语言写的 直到c99 才引入了bool类型 bool类型只有两个值 1 or 0
在c++中 如果对一个bool类型变量使用前缀或后缀自增运算符,不管这个变量是false还是true,这个变量将变为true,但是不能对bool类型变量使用前缀或后缀自减运算符。
个人觉得php开发组为了省事 ,索性来个什么都不变 。
你自增或者自减 我 就在那里。 不增不减。 :)

归属感 2017-07-31 4 楼

php手册上对递增的解释上有这么一条
Note: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。

而$a+=1 等同于$a = $a + 1;php是动态语言。在右侧将原先的布尔型$a,true转换成了整理1.
所以$a成了2

灵芸 2017-07-27 3 楼

x++为什么比x+=1快?其实就是在这些小细节上。

灵芸 2017-05-27 2 楼

bool只有true和false两种值。而且严格意义上说,true 并不是1 false并不是0 只有被强制转换或运算式结果对变量的赋值后才是对应的1或0
--、++运算符我们都这么理解$var++ 与$var=$var+1等同,但它们对Boolean值无效。

归属感 2017-04-15 1 楼

本来这种问题就是死的,但如果一定要一个说法,我想就是因为操作符的原因。+=是二元操作符,而++是一元操作符,二元操作符会根据第二参数进行类型转换,而一元操作符却没有可以比较的参数类型。
个人觉得这种说法是比较合理的。
具体内部是如何实现的,我觉得没必要纠结。