Intereting Posts

PHP Catchable fatal error: объект класса не может быть преобразован в строку

Я полностью потерялся здесь … После проверки ввода я создаю экземпляр класса 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] [error] [клиент 127.0.0.1] PHP Catchable fatal error: Объект класса framework \ models \ Message не может быть преобразован в строку в / var / www / p-lug / p -lug_lib / framework / models / Message.php в строке 18, референт: https: //p-lug.localhost/message/compose/4

Строка 18 относится к оператору return, но даже если я удаляю return это приводит к той же ошибке.

Я прочитал бесчисленные ссылки относительно этой ошибки, но ни один из ответов не применим к моему примеру. Ни при каких обстоятельствах я не пытаюсь преобразовать объект в строку или вывести результат , и аналогичный код для вложений с другими классами работает отлично. Фактически, этот код был скопирован с другого рабочего примера, единственное, что изменилось, это таблица и данные.

Я использовал var_dump() для всех передаваемых переменных, на $this и $sth , все проверяется. Но при execute() он терпит неудачу. Что, черт возьми, происходит здесь?

Таким образом, $ message содержит объект.

Этот объект передается функции insertMessage как 4-й аргумент ($ body, который все еще является одним и тем же объектом)

Затем вы сохраняете объект Message, хранящийся в переменной $ body в массиве хэша, который передается в качестве аргумента для выполнения.

Функция execute пытается преобразовать объект Message в строку, но обнаруживает, что функция __toString не объявлена.

Поэтому либо объявляйте

 public function __toString() { return $the_string; } 

или создать другую публичную функцию / член, которую вы можете передать функции выполнения.

$message которое передается аргументу $body является объектом, возвращаемым из метода build() в модели.

Вы можете просто вернуть сообщение, которое было построено в методе build() а не как объект.