类对象无法转换为字符串错误

我在 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));"}
stack overflow Object of class could not be converted to string error
原文答案
author avatar

接受的答案

我通过将__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);               
    }
}

答案:

作者头像

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