2010-05-20 105 views
2

我正在Zend項目上工作,自從我觸及Zend已經超過12個月,我得到了一個函數的錯誤,我不知道爲什麼,我認爲它可能是直到最初在PHP(5.2)的早期版本中構建的網站,現在我正在運行5.3。PHP問題與get_class

功能看起來像這樣,

public function addDebug($mixedObject, $title = "") 
    { 
     $debugObject = new stdClass(); 
     $debugObject->title  = $title; 
     $debugObject->type  = gettype($mixedObject); 
     $debugObject->className = (!get_class($mixedObject)) ? "" : gettype($mixedObject);<-- Line error is complaining about --> 
     $debugObject->mixedObject = $mixedObject; 
     array_push($this->debugArr, $debugObject); 
    } 

該錯誤消息如下,

get_class() expects parameter 1 to be object, array given in /server/app/lib/View.php on line 449

在這個問題上任何意見將是一件好事。

+1

你真的看過錯誤信息嗎?因爲它已經說明了導致錯誤的原因,即您將數組傳遞給addDebug函數而不是對象。所以無論你的邏輯(即get_class調用)是錯誤的,或者你傳遞錯誤的參數到你的函數。 – wimvds 2010-05-20 09:56:44

回答

2

get_class函數要求參數是一個對象。錯誤說$ mixedObject是一個數組。

它可以幫助檢查$ mixedObject是一個對象,第一:

$debugObject->className = is_object($mixedObject) ? get_class($mixedObject) : ''; 
+0

這裏並沒有給這個錶帶來什麼新東西。 – Sam152 2010-05-20 09:54:13

+0

是的,我正在編輯..對不起 – Shiki 2010-05-20 09:58:19

2

你是否已經檢查是否「$ mixedObject」是一個真正的對象? 因爲錯誤確切地說它不是。

你可以把一個檢查,如果給定的$ mixedObject是一個對象與否:

if (is_object($mixedObject)) { 
    $debugObject->className = get_class($mixedObject); 
} else { 
    $debugObject->className = gettype($mixedObject); 
} 

編輯:我也看到了一些其他錯誤,get_class返回一個字符串,所以你的上線檢查將永遠是「true」(或假,因爲你否定它),然後設置空字符串。 試試像上面的例子。

1

它期望一個對象通過,但您將它設置爲空字符串並將其傳遞到問號後面。

+0

那是不正確的。 調用get_class時發生錯誤。此時$ mixedObject是傳遞給函數的任何東西。 gettype的空字符串/返回值的賦值將進入$ debugObject-> className。 – enricog 2010-05-20 10:04:28

0

它看起來像你通過$mixedObject一個數組。

檢查此變種與is_object,然後使用gettype(如果爲false)或get_class(如果爲true)。