这几道题是在德问上看到的,感觉挺有意思,拿来给大家分享其中的陷阱,看看你会不会掉入其中。
第一题
$arr = array(0=>1,"aa"=>2, 3, 4); foreach($arr as $key=>$val){ print($key == "aa" ? 5 : $val); }
Array ( [0] => 1 [aa] => 2 [1] => 3 [2] => 4 )
print($key === "aa" ? 5 : $val);
第二题
$i='11'; printf("%d\n",printf("%d",printf("%d",$i)));
var_dump(printf("%d",$i));
11int(2)
第三题
$a = 3; $b = 5; if($a = 5 || $b = 7) { $a++; $b++; } echo $a . " " . $b;
第二个陷阱,认为答案等于 6 8。 你识破了 $a = 5 || $b = 7 这个骗局,但你没有注意到,逻辑或里只要依次执行直到某个表达式结果为true,表达式后边的就不再执行,$a = 5 返回true,后边的$b=7就不执行了。
第三个陷阱,认为答案等于 6 6。 OK,你识破了 逻辑或的规则,于是$a=5执行,$b=7不执行,但是你没有考虑到这里是逻辑表达式,返回给$a的值是要转换为布尔值的。这样看。
所以经过以上三个陷阱,你应该知道答案是多少了,其实 $a等于true以后,echo $a 输出就是1 ,$b值不变,结果就是 1 6 。
第四题
$count = 5; function get_count() { static $count = 0; return $count++; } ++$count; get_count(); echo get_count();
第五题
$a = count ("567") + count(null) + count(false); echo $a;
如果你回答 3 or 1,恭喜,掉入陷阱了。
因为count(null)等于0,false也算一个值。所以count(false)等于1。