Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP可捕获致命错误:类的对象无法转换为字符串_Php_Pdo - Fatal编程技术网

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

PHP可捕获致命错误:类的对象无法转换为字符串,php,pdo,Php,Pdo,我在这里完全迷路了。。。验证某些输入后,我创建了一个消息类的实例,并尝试将数据插入数据库: // send message $message = $this->model->build('message', true); $message->insertMessage($uid, $user->user_id, $title, $message); 插入的方法非常简单: // insert a new message public function insertMess

我在这里完全迷路了。。。验证某些输入后,我创建了一个
消息
类的实例,并尝试将数据插入数据库:

// 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可捕获 致命错误:无法创建类framework\models\Message的对象 在中转换为字符串 /var/www/p-lug/p-lug_lib/framework/models/Message.php,第18行, 推荐人:

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

我已经阅读了无数关于这个错误的链接,但是没有一个答案适用于我的例子在任何情况下,我都不会尝试将对象转换为字符串或输出结果,用于插入其他类的类似代码也能很好地工作。事实上,这段代码是从另一个工作示例复制粘贴的,唯一改变的是表和数据


我已经在所有被传递的变量上使用了
var\u dump()
,在
$this
$sth
上,所有内容都被检查出来。但是在
execute()
上它失败了。这到底是怎么回事?

所以$message包含一个对象

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

然后将存储在变量$body中的消息对象存储在散列数组中,散列数组作为要执行的参数传递

execute函数尝试将消息对象转换为字符串,但发现没有声明uuu toString函数

所以要么宣布

public function __toString() {
    return $the_string;
}

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

$message
传递给
$body
参数的是从模型中的
build()
方法返回的对象


您只需返回在
build()
方法中生成的消息,而不是对象。

类的
message
有什么功能?你可以发布吗?但是即使我删除了它,返回它也会导致同样的错误。这意味着错误在上面一行。检查
$this->db
是否有效。您是对的。我在
\u POST
中定义了
$message
,然后在创建对象时无意中重新定义了它,并将其传递给自身。我也不是第一次把这样的变量混在一起了,该死的。非常感谢。没错,这正是我想说的lol。我认为将对象引用传递给自身(或多或少)有点奇怪P