我收到以下关于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));"}
答案 0 :(得分:2)
我通过向对象添加__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);
}
}
答案 1 :(得分:1)
要以这种方式将对象转换为字符串,您需要定义一个神奇的__toString()方法