在服务器日志中显示错误...如何阻止它?

时间:2009-03-21 06:44:53

标签: php arrays foreach invalid-argument

我收到了一个错误,我用谷歌搜索了我能想到的一切,几乎没有任何见解。也许你可以用一双清新的眼睛来帮助它。

我有一个返回对象数组的函数。调用此函数的代码然后遍历此数组并执行它需要对每个对象执行的操作。当它吐出HTML时,它似乎在视觉上工作,但服务器日志仍然给出错误“为foreach()提供的无效参数”。是的,它在技术上很有效,但我不希望再出现这个错误。想法?

<?php

// The class whose method returns an array of library_Label objects
class library_Label
{
  public $id = null;
  public $name = null;

  public function getChildren()
  {
    // $children is declared earlier
    return $children;
  }
}


// main code
$columns = new library_Label(1);
foreach ($columns->getChildren() as $label) echo $label->Name;

?>

3 个答案:

答案 0 :(得分:1)

您没有说出您正在使用的语言,但这看起来像是一个PHP错误。如果是这样,请查看PHP的error reporting levels。但是,您可能实际上应该更改php.ini中的值,这样就不会将其他错误转储到服务器日志中。

当然,你会想知道为什么抛出这个错误。

答案 1 :(得分:1)

当您尝试对不是数组的变量执行"Invalid argument supplied for foreach()"时,会发出警告foreach

您需要检查getChildren()实际的返回值是数组。

由于您既未提供构造函数源,也未提供实际创建$children的代码,因此我们无法从您的上下文中说出这一点。如果即将到来,可能更容易帮助你。

您可以尝试的一件事是在执行foreach之前使用"print_r($columns->getChildren())"打印出返回值。这应该清楚地表明它是否是一个数组。

我还建议使用empty()count()检查数组是否为空 - 网状态的某些网站表示空数组也会引发此警告,但我没有在家里的PHP环境来测试它。

答案 2 :(得分:1)

这是相当普遍的,我的解决方案总是改变这个:

foreach ($columns->getChildren() as $label) echo $label->Name;

$children = $columns->getChildren();
if (is_array($children)) foreach ($children as $label) echo $label->Name;

它应涵盖所有情况。

您可以将其扩展为带有大括号的完整if语句,然后包含一个else块来处理子项为空时的情况。