什么时候可以在多维数组中访问定义变量?

时间:2014-01-26 09:52:34

标签: php arrays multidimensional-array

我很惊讶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 Notice: Undefined variable: config in ..

Online example

似乎PHP在关闭父数组的);后将其写入内存。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:4)

在大多数语言中,赋值(A = B)实际上是一个两步过程:首先评估整个右侧操作数(示例中为B),然后计算结果评估分配给左侧操作数(A)。在B的评估中,A的分配尚未发生;在评估B时不会连续发生,但在完全评估 B后,单个原子操作

答案 1 :(得分:2)

这就像在把它从架子上取下之前试图读一本书。在PHP中,您无法在定义数组元素之前访问它们。

仅在计算完整语句后才定义数组,因此当您尝试访问数组中的$config['debug']['type']['remote_specific']时,$config是PHP的未知变量,因此会抛出通知。< / p>

答案 2 :(得分:1)

你的第二部分使用$ config数组,当你还在声明时, 你可以将其拆分为2个声明:

$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
 );