2012-12-16 40 views
2

我在Smarty中的對象函數接收到以下錯誤,我不知道如何解決該問題。PHP PDO類的對象無法轉換爲字符串

錯誤:

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));"} 
+0

嘗試移除引號包圍的表達,所以'值= 「$ userObj-> fetchUser ...」''變爲值= $ userObj-> fetchUser ...' – DaveRandom

+0

這樣做後我收到以下錯誤。 ''SmartyCompilerException'帶有消息'模板中的語法錯誤'./templates/profile_left.tpl「on line 149」{assign var ='udatas'value = $ userObj-> fetchUser(array('id'=> $ ststres [ststval ] .to_id))}「 - Unexpected」=>「,預計其中的一個:」「,」「,」)' –

+0

爲什麼負面的點和編輯過的東西 –

回答

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

}

1

將對象轉換爲字符串以這種方式,您可以通過添加__toString需要定義

+1

您可以使用我的代碼提供一個例子嗎? –

+0

From我在這裏看到的,你必須實現該方法,並可以從那裏返回任何字符串..它似乎不關心實際值是什麼,因爲下面的帖子顯示了從impl'd返回的空字符串方法在我的情況下,爲了安全起見 - 我確保在對象之間有唯一的字符串。:: \t public function __toString(){ \t \t \t return(string)$ this-> action; \t} – gnB

+0

@gnB是的,你可以從magic __toString()方法返回任何你想要的東西,只要它是一個字符串值 –