今天我发现了一个奇怪的if语句,在PHP7中报告为true而没有错误。请参阅下面的示例;
<?php
$array = array();
// This is true
if (!is_array($array)['key']) { echo 'test1'; }
// Strangely, this reports false
if (true['key']) { echo 'test2'; }
// This also reports true
if (!(1)['key']) { echo 'test3'; }
// Knowing the statement must be false (!(1)), you would think that false works; it doesn't
if (false['key']) { echo 'test4'; }
有人可以解释为什么它报告test1和test3为真,当它显然是错误的代码而没有抛出错误?除了第一个语句(test1)之外,它在PHP 5.6上执行了所有语句。
答案 0 :(得分:1)
答案是
var_dump(is_array($array)['key'], true['key'], (1)['key'], false['key']);
它是
NULL, NULL, NULL, NULL
还有一个男人的字符串:
对于任何类型integer,float,string,boolean和resource,将值转换为数组会产生一个数组,其中包含索引为零的单个元素以及已转换的标量值。换句话说,
(array)$scalarValue
与array($scalarValue)
完全相同。