PHP - 奇怪的IF语句

时间:2016-12-12 16:16:46

标签: php

今天我发现了一个奇怪的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上执行了所有语句。

1 个答案:

答案 0 :(得分:1)

答案是

var_dump(is_array($array)['key'], true['key'], (1)['key'], false['key']);

它是

NULL, NULL, NULL, NULL

还有一个男人的字符串:

  

对于任何类型integer,float,string,boolean和resource,将值转换为数组会产生一个数组,其中包含索引为零的单个元素以及已转换的标量值。换句话说,(array)$scalarValuearray($scalarValue)完全相同。