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 を学ぶときに誰もが読むのと同じ記事を指すのではなく、助けを求められたときに説明する必要があります。こういったサイトに助けを求めるのは、知識のある人からの説明が必要だからだと思います。私はそれを怠惰で役に立たないと呼びます!

クラス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);               
}

}

于 2012-12-17T19:46:51.277 に答える
1

この方法でオブジェクトを文字列に変換するには、魔法の__toString()メソッドを定義する必要があります

于 2012-12-16T21:16:13.250 に答える