class dd {
const d = 'd';
public function test() {
$arr = array();
$arr['d'] = 'test';
$arr2 = array(
'a' => '1',
'b' => '2',
'c' => '3',
'd' => '4'
);
foreach ($arr2 as $key=>$value) {
if (in_array($key,array('a','b','c')) || isset($arr['self::d'])) {
echo $key;
}
}
}
}
$dd = new dd();
$dd->test();
输出:abc
为什么不是输出abcd
补充一下:其实我真正想问的是,单引号不是不解析么?为什么echo $arr['self::d']。提示的是未定义'self::d'这个常量?提示是为定义'self::d'可不是'd'哦。
这个问题需要先解决了你的补充问题。
1.执行 echo $arr['self::d']
给出的notice的是:
Notice: Undefined index: self::d
注意如果你把这翻译成中文应该是未定义的索引,而非未定义的常量。单引号不解析这句话是对的,因此php会直接在数组 $arr
中寻找索引(或者说下标,看你的习惯了)为 self::d 的元素,然后未找到,因此给出notice
2.为什么输出的是 abc
而非abcd
?看完了上面的一个回答者问题就很容易了,因为单引号不解析,而 $arr
中索引为 self::d
的元素不存在,因此 isset($arr['self::d'])
这一个表达式是为 false
的。修正的方法(我觉得也是你的本意)其他几位已经回答了,把 $arr['self::d']
改为 $arr[self::d]
。没有了单引号,那 self::d
就会被解析执行,判断的就是 $arr['d']
了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。