2011-02-17 66 views
0

需要關於arrayObject異常處理的幫助。我遍歷一系列對象,但是當偏移量結束時發生致命異常。該代碼是:用arrayObject處理php致命異常

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' 

任何幫助將是巨大的。

+1

如果沒有'$ B'任何背景或解釋, '$ c','$ q'或'$ num',這個真的很難理解...... – BoltClock

+0

我確信致命的異常與'新的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++; 
} 

它是通過

0

manual

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_iterate上做一個var_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

我認爲這是正確的,但我遇到麻煩的代碼來阻止這種類型的異常發生,因爲我不知道有多少對象存在,即它可能是從1到10的任何東西? –

+0

使用is_object()來測試$ object_to_iterate是否是一個對象 – Capsule

+0

'count($ q)'會告訴你存在多少個。 –