2013-03-24 247 views
2

我有用於處理SQL的通用函數。我得到這個錯誤(每天只有幾次,不頻繁)。檢查變量是否是PDO對象?

PHP Catchable fatal error: Object of class PDO could not be converted to string in... 

基本上,值的陣列被傳遞給我使用的功能,並且我必須在我的代碼已經下滑並放置一個PDO對象陣列英寸

我需要做一個array_filter函數來檢查變量是否是一個PDO對象。我如何爲此做一個簡單的if語句?

if($var == PDO) 

編輯:感謝您的偉大答案!如果有人感興趣,這裏是我如何解決這個問題。我能夠找到無效輸入來自哪裏。

$before=$original_array; 
$after = array_filter($before, "find_error"); 
if(count($before)!=count($after)){ 
    $error=print_r(debug_backtrace(false),true); 
    $arr=print_r($before,true); 
    send_message("[email protected]","Error Report",$arr.$error); 
//send_message is a simple function for sending emails. You could also write information to a txt file, etc. 
} 

function find_error($var){ 
    return !($var instanceof PDO); 
} 
+0

看到我編輯的答案,我會建議你不要使用此解決方案,但更正將PDO對象放入陣列中的錯誤。 – vascowhite 2013-03-24 08:10:05

+0

其實,這正是我想要做的。我需要生成一個回溯,所以我可以看到腳本在做什麼。 array_filter讓我知道如果數組是無效的。看到我上面的代碼。 – hellohellosharp 2013-03-24 08:12:12

+0

啊,好的。祝你好運,我很高興你找到了答案。 – vascowhite 2013-03-24 08:13:06

回答

10

的instanceof用於確定一個PHP變量是否是某個類的實例化的對象:

if($var instanceof PDO) { 
    // your code 
} 
2

可以使用instanceof此。

if($var instanceof PDO){ 
    //code here 
} 

但是你說

我必須在我的代碼已經下滑並放置一個PDO對象,數組中

我會建議您查找和正確的,滑起來,否則在繼續開發時可能會爲自己存儲其他問題,並可能將該數組傳遞給應用程序的其他部分。

總是治好這個問題,而不是專注於治療症狀。

2
  1. 你試圖治癒症狀而不是疾病。
  2. 你正在嘗試它僅僅是猜測。

你想做什麼就叫做「錯誤信息抑制」。由於好的撒瑪利亞人已經給你帶來了所需的if聲明,你只是閉上眼睛假裝程序流程中沒有錯誤。雖然它仍然存在。

一位優秀的程序員不得不問「如何找出錯誤以及如何解決這個錯誤」,而不是「如何盯着它」。

因此,您必須使用debug_backtrace()來追蹤添加錯誤數據的地方。這個函數必須放在你有錯誤信息標記的行中。
然後您需要調試代碼以確保您添加PDO結果的假設是正確的。
最後修復錯誤。

看來你在寫這個答案的時候設法解決了這個問題。但是我必須在這裏留給未來的讀者。

+0

是的,我同意你應該關注整體問題而不是症狀。但是......有時你需要強烈關注症狀,以便找出問題實際是什麼。 – hellohellosharp 2013-03-24 08:18:56