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

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

Допустимая фатальная ошибка: объект класса 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 не может быть преобразован в строку

Я не могу использовать некоторые скобки здесь. Что я могу сделать?