Объект не может быть преобразован в строку?

Почему я получаю эту ошибку:

Обрезаемая фатальная ошибка: объект класса Card не может быть преобразован в строку в /f5/debate/public/Card.php в строке 79

Вот код:

public function insert() { $mysql = new DB(debate); $this->initializeInsert(); $query = "INSERT INTO cards VALUES('$this->$type','$this->$tag','$this->$author->$last','$this->$author->$first', '$this->$author->$qualifications','$this->$date->$year','$this->$date->$month', '$this->$date->$day','$this->$title', '$this->$source', '$this->$text')"; $mysql->execute($query); } 

(Строка 79 – это $query и эта функция является частью класса Card )

Все объявления Card :

 public $type; public $tag; public $title; public $source; public $text; public function __construct() { $this->date = new Date; $this->author = new Author; } 

После изменения строки 79:

 $query = "INSERT INTO cards VALUES('$this->type','$this->tag','$this->author->last','$this->author->first', '$this-$author->qualifications','$this->date->year','$this->date->month','$this->date->day', '$this->title', '$this->source', '$this->text')"; - $query = "INSERT INTO cards VALUES('$this->type','$this->tag','$this->author->last','$this->author->first', '$this-$author->qualifications','$this->date->year','$this->date->month','$this->date->day', '$this->title', '$this->source', '$this->text')"; - $query = "INSERT INTO cards VALUES('$this->type','$this->tag','$this->author->last','$this->author->first', '$this-$author->qualifications','$this->date->year','$this->date->month','$this->date->day', '$this->title', '$this->source', '$this->text')"; - $query = "INSERT INTO cards VALUES('$this->type','$this->tag','$this->author->last','$this->author->first', '$this-$author->qualifications','$this->date->year','$this->date->month','$this->date->day', '$this->title', '$this->source', '$this->text')"; 

Теперь я получаю эту ошибку:

Обрезаемая фатальная ошибка: объект класса Автор не может быть преобразован в строку в /f5/debate/public/Card.php в строке 79

Читайте о синтаксическом анализе строк , вы должны заключить в них скобки {} :

 $query = "INSERT INTO cards VALUES('$this->type','$this->tag','{$this->author->last}'," 

Всякий раз, когда вы хотите получить доступ к многомерным массивам или свойствам свойства в строке, вы должны заключить этот доступ с помощью {} . В противном случае PHP будет анализировать только переменную до первого ->property [i] или ->property .

Таким образом, с "$this->author->last" вместо "{$this->author->last}" , PHP будет анализировать и оценивать $this->author который дает вам ошибку, поскольку author является объектом.

Я не думаю, что вам нужен знак $ при использовании оператора со стрелкой.

вы не должны ставить $ before имена свойств при их доступе:

 public function insert() { $mysql = new DB(debate); $this->initializeInsert(); $query = "INSERT INTO cards VALUES('$this->type','$this->tag','$this->author->last','$this->author->first','$this-$author->qualifications','$this->date->year','$this->date->month','$this->date->day','$this->title', '$this->source', '$this->text')"; $mysql->execute($query); } 

Вы пытаетесь эхо-объект сам по себе, а не строковое свойство. Проверьте свой код внимательно.

Вероятно, вы захотите использовать:

 $query = "INSERT INTO cards VALUES('$this->type','$this->tag' // etc 

Я думаю, что один из объектов не имеет метода toString (), поэтому он не может быть представлен как строка.