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


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

如下:

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

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

上边两段是等效的。但是对于bool的操作就出现不同了:

   
  $a = true; $a+=1; echo $a;   //输出2
  

$a = true; $a++; echo $a; //输出1

原因是第二段代码 ++ 操作并没有将 true 强制转换为 int ,所以还是 true,所以输出为 1 ,

现在想知道 ++操作为什么不会将 bool强制转换为int类型?

趣味 php

秋田小町半价啦 12 years, 9 months ago

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

头丢啦啦啦 answered 12 years, 9 months ago

Your Answer