Объект не может быть преобразован в строку?
Почему я получаю эту ошибку:
Допустимая фатальная ошибка: объект класса Card не может быть преобразован в строка в /f 5/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')";
Теперь я получаю эту ошибку:
Обрезаемая фатальная ошибка: объект класса Автор не может быть преобразован для строки в /f 5/debate/public/Card.php в строке 79
Ответы
Ответ 1
Прочитайте синтаксический анализ строк, вы должны заключить в них скобки {}
:
$query = "INSERT INTO cards VALUES('$this->type','$this->tag','{$this->author->last}',"
Всякий раз, когда вы хотите получить доступ к многомерным массивам или свойствам свойства в строке, вы должны заключить этот доступ с помощью {}
. В противном случае PHP будет анализировать только переменную до сначала [i]
или ->property
.
Итак, вместо "{$this->author->last}"
"$this->author->last"
PHP будет анализировать и оценивать только $this->author
, который дает вам ошибку, поскольку author
является объектом.
Ответ 2
Я не думаю, что вам нужен знак $при использовании оператора стрелок.
Ответ 3
вам не следует присваивать имена $before properties при их доступе:
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);
}
Ответ 4
Вы пытаетесь эхо-объект сам по себе, а не свойство строки. Внимательно проверьте ваш код.
Ответ 5
Вероятно, вы захотите использовать:
$query = "INSERT INTO cards VALUES('$this->type','$this->tag' // etc
Ответ 6
Я думаю, что один из объектов не имеет метода toString(), поэтому он не может быть представлен как строка.
Ответ 7
У меня та же проблема при SELECT * FROM tbl
приводит к ошибке с:
Объект класса Nette\Database\Row не может быть преобразован в строку
Я не могу использовать некоторые скобки здесь. Что я могу сделать?