2009-03-21 5 views
0

私はエラーが発生していると私はほとんどすべての洞察力と思うことができるすべてのGoogle検索しました。多分あなたは目の新鮮なセットで助けることができます。サーバログにエラーが表示される...どうすれば停止できますか?

私は、オブジェクトの配列を返す関数を持っています。この関数を呼び出すコードは、この配列をループし、各オブジェクトで何をする必要があるのか​​を行います。 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; 

?> 
+0

いくつかのコードを表示できますか?特に、あなたが戻ってきたこととforeachがどのように見えるか。 – strager

+0

コードなし...言語でさえも! – vladr

+0

これはPHPです。申し訳ありませんが、それは情報の重要なビットのように見えますか? – Iwasakabukiman

答えて

1

これは私のソリューションは、これを変更することは常にあり、かなり一般的です。

完全なif文に中括弧をつけて展開し、必要に応じて子供が空になったときの状況を処理するelseブロックを追加することもできます。

1

どの言語を使用しているのかはわかりませんが、PHPエラーのようです。もしそうなら、PHPのerror reporting levelsをチェックしてください。しかし、実際にphp.iniの値を変更して、サーバーログに他のエラーをダンプしないようにしてください。

もちろん、そのエラーが発生している理由を調べる必要があります。

1

警告"Invalid argument supplied for foreach()"は、配列ではない変数に対してforeachを実行しようとすると発生します。

getChildren()からの戻り値が実際にはであることを確認する必要があります。配列はです。

実際に$childrenを作成したコンストラクタソースもコードも提供していないため、これはあなたのコンテキストからは分かりません。それが近づいたら、あなたを助けるほうが簡単かもしれません。

foreachを実行する前に戻り値を印刷して、"print_r($columns->getChildren())"としてみてください。これは配列かどうかを明確に示すはずです。

empty()またはcount()を使用して配列が空であるかどうかを確認することもお勧めします。空の配列がこの警告を引き起こすネット状態のサイトもありますが、私は自宅でテストするためにPHP環境を持っていませんそれ。それは、すべての状況をカバーする必要があり

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

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

関連する問題