Cla*_*cea 8 php object tostring
有人能告诉我我做错了什么吗?这是我第一次使用__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))"}
Run Code Online (Sandbox Code Playgroud)
这是对象.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
hek*_*mgl 13
错误消息... must return a string value ...只是意味着__toString()的返回值必须是数据类型字符串的值.如果您的示例中的$ users_class不是字符串值,则必须在返回之前将其转换为字符串.
但是在阅读上面的例子时,我觉得var $ users_class可能还没有被初始化.在这种情况下,将方法__toString()更改为:
public function __toString() {
if(is_null($this->users_class)) {
return 'NULL';
}
return $this->user_class;
}
Run Code Online (Sandbox Code Playgroud)
要使上述代码正常工作,您还需要对smarty代码进行更改.删除value=属性值周围的双引号.