对象无法转换为字符串?

时间:2010-07-08 05:37:33

标签: php

为什么我收到此错误:

  

捕获致命错误:类卡的对象无法转换为   第79行/f5/debate/public/Card.php中的字符串

以下是代码:

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')";

我现在收到此错误:

  

捕获致命错误:无法转换类作者的对象   在第79行的/f5/debate/public/Card.php中输入字符串

6 个答案:

答案 0 :(得分:10)

了解string parsing,您必须用括号{}括起变量:

$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是一个对象,因此会出现错误。

答案 1 :(得分:6)

使用箭头操作符时,我认为您不需要$符号。

答案 2 :(得分:3)

在访问属性名称时,不应将$放在$之前:

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);
    }

答案 3 :(得分:2)

您正在尝试回显对象本身,而不是它的字符串属性。仔细检查您的代码。

答案 4 :(得分:2)

您可能想要使用:

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

答案 5 :(得分:2)

我认为其中一个对象没有定义toString()方法,所以它不能表示为字符串。