开发者社区> 问答> 正文

请教关于php数组碰到的难题,求助。

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'哦。
screenshot

展开
收起
落地花开啦 2016-06-14 10:49:51 1790 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    这个问题需要先解决了你的补充问题。
    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'] 了。

    2019-07-17 19:36:58
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载