2010-07-08 22 views
13

¿Por qué recibo este error:¿No se pudo convertir el objeto a cadena?

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

Este es el código:

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

(Línea 79 es la $query y la función es parte de la clase Card)

Todas las declaraciones de Card:

public $type; 

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

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

Después de cambiar la línea 79 a la siguiente:

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

Ahora recibo este error:

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

+0

Eso es por '$ this- $ author-> qualifications' – quantumSoup

Respuesta

9

leer sobre string parsing, usted tiene que incluir las variables con los soportes {}:

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

Cada vez que desee acceder a las matrices o las propiedades de una propiedad en cadena multidimensionales, que tienen que encerrar este acceso con {}. De lo contrario, PHP solo analizará la variable hasta el primero[i] o ->property.

Así que con "$this->author->last" en lugar de "{$this->author->last}", PHP sólo analizará y evaluará $this->author que le da el error como author es un objeto.

3

usted no debe poner $ antes de los nombres de propiedades cuando se accede a ellos:

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

Está intentando hacer eco de un objeto en sí mismo, no de una cadena de caracteres. Revisa tu código cuidadosamente.

2

es probable que desee utilizar:

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

No creo que necesita el signo $ al utilizar el operador flecha.

1

Creo que uno de los objetos no tiene definido el método toString() por lo que no se puede representar como una cadena.

Cuestiones relacionadas