这更像一个关于为什么然后'怎么做'的问题,但现在已经让我烦恼了好几天了.目前我正在使用CodeIgniter进行一些工作并暂时从Ruby返回PHP,这让我想到了以下的范围魔术.
<?php $query = $this->db->get('articles', 2);
if ($query->num_rows() > 0)
{
foreach ($query->result_array() as $row)
{
$data[] = $row; # <-- first appearance here
}
return $data; # <--- :S what?!
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我不是一个PHP大师,但本地范围的想法让我觉得在foreach循环之外变量是"可用的".所以我在一个视图中尝试了这个:
<?php
if($a==1)
{
$b = 2;
}
echo $b;
?>
Run Code Online (Sandbox Code Playgroud)
哪个导致错误消息:
Message: Undefined variable: b
Run Code Online (Sandbox Code Playgroud)
PHP手册讲述了本地范围,但我仍然想知道为什么会发生这种情况,如果有特殊规则我不知道.它吓到我了:)
感谢分享想法,
mar*_*rio 11
只有函数创建一个新的本地范围.卷曲括号本身不会.大括号只是一个auxillary结构对其他语言的结构(if,while或foreach).
无论您何时访问本地范围内的任何变量都无关紧要.本地范围是幕后的隐式字典(请参阅get_defined_vars).您可以通过访问以前未定义的变量来获得调试通知,但这就是它.
在您的具体示例中,您甚至只是在全球范围内运营.
foreach 不会在PHP中创建任何变量范围,因此如果变量在foreach之外可用则很自然
对于第二个问题,$a不等于1因此$b未初始化并在您访问外部时发出通知.如果指定值1来$a测试它,你会不知道该通知将消失.
这里没有范围.