【发布时间】:2011-04-21 11:11:15
【问题描述】:
这更多是关于为什么然后是“如何做”的问题,但它已经让我烦恼了几天。目前我正在使用 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?!
}
如您所见,我并不完全是 PHP 专家,但本地范围的想法让我感到困扰,即在 foreach 循环之外,变量是“可用的”。所以我在一个视图中尝试了这个:
<?php
if($a==1)
{
$b = 2;
}
echo $b;
?>
这会导致错误消息:
Message: Undefined variable: b
PHP 手册讲述了本地范围,但我仍然想知道为什么会发生这种情况,以及是否有我不知道的特殊规则。它让我害怕:)
感谢您分享想法,
【问题讨论】:
-
仅当 $a 为 1 时才在第二个示例中创建变量。由于 $a 不存在(PHP 实际上在此处引发错误),因此不会创建 $b。在第一个示例中,所有条件都已满足,因此创建了 $data 并将其用作返回值。
-
第二个例子更多的是澄清/过度简化大括号外的 $b 是可访问的 - 正如其他答案所述,大括号不定义变量的范围。而且,我不知道:)
-
我认为这已经过时了,或者可能是严格的问题。您的第二个示例适用于我并打印 2。我正在使用 5.4.16 并关闭 STRICT
-
@Dennis,它不起作用。你认为它有效是因为 Shyam 已经更正了所有其他人一直在谈论的代码。我进行了回滚,以便每个人都在同一页面上。