2010-07-08 13 views
13

Warum erhalte ich diese Fehlermeldung:Objekt konnte nicht in Zeichenfolge konvertiert werden?

Catchable fatal error: Object of class Card could not be converted to string in /f5/debate/public/Card.php on line 79

Hier den Code ist:

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 Line ist die $query und die Funktion ist Teil der Klasse Card)

Alle Erklärungen von Card:

public $type; 

public $tag; 
public $title; 
public $source; 
public $text; 

public function __construct() { 
    $this->date = new Date; 
    $this->author = new Author; 
} 

Nach Zeile Ändern 79 dazu:

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

ich jetzt diesen Fehler:

Catchable fatal error: Object of class Author could not be converted to string in /f5/debate/public/Card.php on line 79

+0

Das liegt an '$ this- $ author-> qualifications' – quantumSoup

Antwort

9

Lesen Sie mehr über string parsing, haben Sie die Variablen mit Klammern {} einzuschließen:

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

Wenn Sie mehrdimensionale Arrays oder Eigenschaften einer Immobilie in Zeichenfolge zugreifen möchten, müssen Sie mit {} diesen Zugang zu umschließen. Andernfalls parst PHP die Variable nur bis zum ersten[i] oder ->property.

Also mit "$this->author->last" statt "{$this->author->last}", PHP wird nur analysieren und $this->author, die Ihnen den Fehler gibt als author ist ein Objekt.

3

Sie nicht $ vor Eigenschaftsnamen setzen sollten, wenn Sie darauf zugreifen:

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

Sie versuchen, ein Objekt selbst, nicht eine String-Eigenschaft von ihm zu echo. Überprüfen Sie Ihren Code sorgfältig.

2

Sie wollen wahrscheinlich verwenden:

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

Ich glaube nicht, dass Sie das $ -Zeichen benötigen, wenn Pfeil-Operator.

1

Ich denke, dass eines der Objekte toString() -Methode nicht definiert ist, so dass es nicht als String dargestellt werden kann.

Verwandte Themen