PHP Catchable致命错误:类的对象无法转换为字符串

时间:2013-07-31 03:58:23

标签: php pdo

我完全迷失了......在验证了一些输入之后,我创建了一个Message类的实例并尝试将数据插入到数据库中:

// send message
$message = $this->model->build('message', true);
$message->insertMessage($uid, $user->user_id, $title, $message);

插入方法非常简单:

// insert a new message
public function insertMessage($to_id, $from_id, $title, $body)
{
    $sql = "INSERT INTO messages (to_id, from_id, title, body, create_date) VALUES
                                 (:to_id, :from_id, :title, :body, NOW())";
    $sth = $this->db->prepare($sql);
    return $sth->execute([':to_id' => $to_id, ':from_id' => $from_id, ':title' => $title, ':body' => $body]);
}

然而,提交后我最终得到一个空白页面,Apache错误日志说:

  

[Tue Jul 30 22:34:44 2013] [错误] [client 127.0.0.1] PHP Catchable   致命错误:类框架\ models \ Message的对象不可能   转换为字符串   第18行的/var/www/p-lug/p-lug_lib/framework/models/Message.php,   referer:https://p-lug.localhost/message/compose/4

第18行引用return语句,但即使我删除了return,也会导致相同的错误。

我已经阅读了关于此错误的无数链接,但没有一个答案似乎适用于我的示例。 我没有尝试将对象转换为字符串或输出结果,并且与其他类的插入类似的代码完美无缺。实际上,这段代码是从另一个工作示例中复制粘贴的,唯一改变的是表和数据。

我在var_dump()$this上传递的所有变量上都使用$sth,所有内容都会检出。但在execute()它失败了。到底发生了什么事?

2 个答案:

答案 0 :(得分:11)

所以$ message包含一个对象。

此对象作为第4个参数传递给函数insertMessage($ body仍然是同一个对象)

然后将存储在变量$ body中的Message对象存储在散列数组中,该散列数组作为参数传递给执行。

execute函数尝试将Message对象转换为字符串,但发现没有声明__toString函数。

所以要么声明

public function __toString() {
    return $the_string;
}

或创建另一个可以传递给execute函数的公共函数/成员。

答案 1 :(得分:0)

传递给$message参数的

$body是从模型中的build()方法返回的对象。

您只需返回使用build()方法而不是对象构建的消息。