__toString()必须返回一个字符串值

时间:2012-12-17 23:06:30

标签: php object tostring

有人能告诉我我做错了什么吗?这是我第一次使用__toString。我收到了以下错误:Catchable fatal error: Method users_class::__toString() must return a string value

这是我使用Smarty对该对象的调用:

 {assign var='udatas' value="$userObj->fetchUser(array('id'=>$ststres[ststval].to_id))"}

这是对象。

class users_class {

protected $users_class;

public function __toString() {

    return $this->users_class;
}
  public function fetchUser(array $conditions){
            $db = Core::getInstance();

            $sql = "SELECT * FROM ".USERS." WHERE ";
            $i=0;
            $params = array();
            //$where = array();
            foreach ($conditions as $column => $value) {
            if (preg_match('/^[a-z-.-_]+$/', $column)) {
                if($i!=0){
                    $sql .= " AND ";
                }
            $sql .= "$column = ?";
            $params[] = $value;
            $i++;

    }
   }            
            //$sql .= implode(' AND ', $where);
            //$sql .= " order by title asc";    
            $res = $db->dbh->prepare($sql);
            $res->execute(array_values($params));
            return $res->fetch(PDO::FETCH_ASSOC);               
}   
   }

3 个答案:

答案 0 :(得分:12)

错误消息... must return a string value ...只表示__toString()的返回值必须是数据类型字符串的值。如果您的示例中的$ users_class不是字符串值,则必须在返回之前将其转换为字符串。

但是在阅读上面的例子时,我觉得var $ users_class可能还没有被初始化。在这种情况下,将方法__toString()更改为:

public function __toString() {
    if(is_null($this->users_class)) {
        return 'NULL';
    }
    return $this->user_class;
}

要使上述代码正常工作,您还需要对smarty代码进行更改。删除value=属性值附近的双引号。

答案 1 :(得分:0)

您正在使用$res->fetch(PDO::FETCH_ASSOC),它将返回任何数组。 您正在将值作为标准对象进行访问。 您需要转换为课程,您可以尝试使用PDO::FETCH_CLASS代替FETCH_ASSOC

很难说你所包含的代码。

答案 2 :(得分:0)

只需替换为: return(string)$ this-> user_class;