我很惊讶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 ..
似乎PHP在关闭父数组的);
后将其写入内存。
我在这里缺少什么?
答案 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
);