2

我在 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));"}
4

2 回答 2

2

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

类用户类{

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

}

于 2012-12-17T19:46:51.277 回答
1

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

于 2012-12-16T21:16:13.250 回答