2011-02-17 9 views
0

arrayObjectの例外処理に関する助けが必要です。一連のオブジェクトを反復処理していますが、オフセットが終了すると致命的な例外が発生します。コードは次のとおりです。php arrayObjectを使用した致命的な例外処理

while ($c <= 10) { 
    $num = 1; 
    $b = $c-$num; 
    $object_to_iterate = $q[$b]; 
    $obj = new ArrayObject ($object_to_iterate); 
    iterateObject($obj); 
    $C++; 
} 

エラーは次のとおりです。

Fatal error: Uncaught exception 'InvalidArgumentException' 

すべてのヘルプは素晴らしいことです。 manualから

+1

を介して動作、 '$ c'、' $ q'、 '$ num'のように、これを理解することは本当に難しいでしょう。 – BoltClock

+0

私は致命的な例外が 'new ArrayObject'に関係していると確信しています。 $ bのオフセットが空の場合、ArrayObjectをキャッチする必要があると思いますか? –

答えて

0

OK、これはそれを行うための最善の方法である場合、私は知らないが、私は、次のコードを使用:

while ($c <= 10) { 
$num = 1; 
$b = $c-$num; 
$object_to_iterate = $q[$b]; 
//exception handling 
if (empty($q[$b])) { 
break; 
} else { 
$obj = new ArrayObject($object_to_iterate); 
iterateObject($obj); 
} 
$C++; 
} 

それは `$ B`の任意のコンテキストや説明もなく

0

:今

The input parameter accepts an array or an Object. 

@BoltClockが言ったように:

そして、どのようなB、C、QおよびNUMをしている知らずに把握することは本当に難しいですが、qが配列の場合
$object_to_iterate = $q[$b]; 

文字列だけかもしれませんか?そして

$obj = new ArrayObject ($object_to_iterate); 

には、オブジェクトまたは配列ではない引数がありますか? その$object_to_iteratevar_dump()を置いて、それが配列かオブジェクトかを確認してください。

+0

私は、$ qオブジェクトが$ bのオフセットを見つけようとしていると考えていますが、その番号は存在しないので、ArrayObjectは$ q [$ b]を使用しようとします。スローされる。それは理にかなっていますか? –

+0

オフセット$ bがあっても、$ q [$ b]はオブジェクトではないかもしれません。実際に$ qの中に何が入っているのかわからないと分かりません。ですから、最終的には、 'object_to_iterate'が実際にオブジェクト(または配列)であるかどうかを確認することが目的です。 – Nanne

0

$ cは何から始まるのですか? 0(可能性が高い)の場合、$ b = -1で、$ q [-1]を取得しようとしていますが、これはもう存在しない可能性があります。つまり、ArrayObjectコンストラクタには何も渡していません。

+0

私はそれが正しいと思いますが、このタイプの例外が発生するのを防ぐためにコードを作成するのに問題があります。なぜなら、オブジェクトの数がどれくらいあるかわからないからです。 –

+0

$ object_to_iterateがオブジェクトであるかどうかを調べる前にis_object()を使用してください。 – Capsule

+0

'count($ q)'がどれくらい存在するかを教えてくれます。 –