定义的变量何时可以在多维数组内部访问?

3

我很惊讶PHP表现得如此奇怪。在构建多维数组时,似乎在最后一个);关闭之前无法访问子数组的变量。

例如:

$config['debug']             = array(
        'type'                 => array(
            'remote_specific'    => true,
            'remote_addr'        => '1.2.3.4',
        ),
        'mode'               => array(
            'PHP'              => ($config['debug']['type']['remote_specific'] && $config['debug']['type']['remote_addr'] == $_SERVER['REMOTE_ADDR']) ? true : true,
            'PDO'              => ($config['debug']['type']['remote_specific'] && $config['debug']['type']['remote_addr'] == $_SERVER['REMOTE_ADDR']) ? true : false
        )
     );

您只会得到错误信息:PHP提示:未定义变量:config in ..

在线示例

看起来PHP是在关闭父数组的);之后向内存中写入它。

我错过了什么?

3个回答

4
在大多数编程语言中,一个赋值操作(A = B)实际上是一个两步过程:首先计算整个右操作数(在本例中为B),然后将该计算结果赋给左操作数(A)。在计算B的过程中,尚未进行对A的赋值,它不会在B被计算时不断执行,而是作为单个原子操作在B完全计算后执行。

@lanzz +1,谢谢,这似乎非常正确!我只需要分割我的数组。 - Ilia

2

这就像在取书之前试图阅读一本书。在PHP中,您不能在定义数组元素之前访问它。

只有在完整语句被评估后才会定义数组,因此当您尝试在数组内部访问$config['debug']['type']['remote_specific']时,$config是PHP中的一个未知变量,因此会抛出一个Notice。


1

你的第二部分使用了$config数组,但你还没有声明它, 你可以将其拆分为两个声明,像这样:

$config['debug']             = array(
        'type'                 => array(
            'remote_specific'    => true,
            'remote_addr'        => '1.2.3.4',
        ));
$config['debug']['mode']     = array(
        'PHP'                  => ($config['debug']['type']['remote_specific'] && $config['debug']['type']['remote_addr'] == $_SERVER['REMOTE_ADDR']) ? true : true,
        'PDO'                  => ($config['debug']['type']['remote_specific'] && $config['debug']['type']['remote_addr'] == $_SERVER['REMOTE_ADDR']) ? true : false
 );

那正是我打算做的。谢谢你的例子! - Ilia
没问题,如果这是解决方案,您可以接受答案。 - Gert B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接