PHP PDO类的对象无法转换为字符串

时间:2012-12-16 20:40:46

标签: php pdo smarty

我收到以下关于Smarty中对象功能的错误,我不知道如何解决问题。

错误:

Catchable fatal error: Object of class users_class could not be converted to string

这是我正在使用的对象的以下对象和功能。

class 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);               
    }
}

这是Smarty的电话:

 {section name=ststval loop=$ststres}
    {if $ststres[ststval].type == 2}
       {assign var='udatas' value="$userObj->fetchUser(array('id'=>$ststres[ststval].to_id));"}

2 个答案:

答案 0 :(得分:2)

我通过向对象添加__toString()方法解决了这个问题。显然,对象只需要返回一个字符串。这让我感到困惑,因为我不知道它应该返回什么,并且在php.net上的指示并不明确。对于学习PHP的人来说,当需要帮助时,需要解释一些事情,而不是指向每个人在学习PHP时都读到的相同文章。我相信我们会在这些网站上寻求帮助,因为我们需要知识渊博的人解释。我称之为懒惰而无益!

class users_class {

 protected $users_class='';

public function __toString() {

    return (string)$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);               
}

}

答案 1 :(得分:1)

要以这种方式将对象转换为字符串,您需要定义一个神奇的__toString()方法