2013-07-31 22 views
2

我完全失去了这里......验证某些输入后,我创建一个Message类的实例,并尝试将数据插入到数据库:PHP开捕致命错误:类对象无法被转换成字符串

// 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] [error] [client 127.0.0.1] PHP Catchable fatal error: Object of class framework\models\Message could not be converted to string in /var/www/p-lug/p-lug_lib/framework/models/Message.php on line 18, referer: https://p-lug.localhost/message/compose/4

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

我读过无数有关此错误的链接,但没有一个答案似乎适用于我的示例。 在任何时候我都试图将一个对象转换为字符串或输出结果,而用于插入其他类的类似代码完美地工作。事实上,这个代码是从另一个工作实例复制粘贴的,唯一改变的是表和数据。

我对$this$sth所有变量都使用var_dump(),所有的东西都检查出来。但在​​上失败。这里发生了什么?

+0

'Message'类有什么?你可以发布吗? – vee

+0

*但即使我删除返回它导致相同的错误。*这意味着错误是在上面的行。检查'$ this-> db'是否有效。 – Raptor

回答

10

So $ message包含一个对象。

该对象被传递给函数insertMessage作为第四参数($体仍然是相同的对象)

您然后存储存储在变量$体消息对象,其作为通过散列阵列中要执行的论据。

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

因此,无论申报

public function __toString() { 
    return $the_string; 
} 

或创建另一个公共功能/会员,你可以传递给执行功能。

+0

你说得对。我从'_POST'定义了'$ message',然后在创建对象时将其重新定义并将其传递给自己。不是我第一次混淆这样的变数,该死的。谢谢! –

+0

正是我想要说的哈哈。我认为将对象传递给自己(或多或少)是有点奇怪的。 :P –

0

$message传递给$body自变量是从模型中的build()方法返回的对象。

您可以简单地返回构建在build()方法中的消息而不是对象。

相关问题