11

誰かが私が間違っていることを教えてもらえますか?__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);               
}   
   }
4

3 に答える 3

16

エラーメッセージ... must return a string value ...は、__ toString()の戻り値がデータ型stringの値でなければならないことを意味します。例の$users_classが文字列値を意図していない場合は、文字列を返す前に文字列に変換する必要があります。

しかし、上記の例を読むと、var$users_classがまだ初期化されていないように見えます。この場合、メソッド__toString()を次のように変更します。

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

上記のコードを機能させるには、smartyコードにも変更を加える必要があります。属性の値を囲む二重引用符を削除しvalue=ます。

于 2012-12-17T23:09:47.083 に答える
2

次のように置き換えるだけです: return(string)$ this-> user_class;

于 2018-06-12T07:15:47.797 に答える
0

使用し$res->fetch(PDO::FETCH_ASSOC)ているのは、任意の配列を返します。標準オブジェクトとして値にアクセスしています。クラスにキャストする必要があります。のPDO::FETCH_CLASS代わりにを使用してみてくださいFETCH_ASSOC

あなたが含めたコードで言うのは難しいです。

于 2012-12-17T23:14:14.370 に答える