PHP问题与get_class

时间:2010-05-20 09:50:43

标签: php zend-framework php-5.3 php-5.2

我正在研究一个Zend项目,自从我触及Zend已经超过12个月了,我的一个函数出错,我无法弄清楚为什么,我认为它可能归结为网站最初是在早期版本的PHP(5.2)中构建的,现在我运行的是5.3。

该功能如下所示,

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

关于这个问题的任何建议都会很好。

4 个答案:

答案 0 :(得分:2)

get_class函数要求参数为对象。该错误表示 $ mixedObject 是一个数组。

首先检查$ mixedObject是否为对象可能会有所帮助:

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

答案 1 :(得分:2)

您是否已经检查过“$ mixedObject”是否真的是一个对象? 因为错误确切地说它不是。

您可以检查给定的$ mixedObject是否为对象:

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

编辑:我也看到一些其他错误,get_class返回一个字符串,所以你对该行的检查总是“真”(或因为你否定它而为假)然后将设置空字符串。 尝试上面的例子。

答案 2 :(得分:1)

期望传递一个对象,但是你将它设置为一个空字符串并在问号后面传递它。

答案 3 :(得分:0)

看起来你以$mixedObject数组传递。

使用is_object检查此var,然后使用gettype(如果为false)或get_class(如果为true)。