2010-07-08 42 views
13

Tại sao tôi nhận được lỗi này:Đối tượng không thể được chuyển đổi thành chuỗi?

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

Dưới đây là đoạn code:

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

(Đường 79 là $query và chức năng là một phần của lớp Card)

Tất cả các tờ khai của Card:

public $type; 

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

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

Sau khi thay đổi dòng 79 như sau:

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

bây giờ tôi nhận được lỗi này:

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

+0

Đó là vì '$ this- $ author-> qualifications' – quantumSoup

Trả lời

9

Đọc về string parsing, bạn phải gửi kèm theo các biến với dấu ngoặc {}:

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

Bất cứ khi nào bạn muốn truy cập mảng đa chiều hay tính chất của một tài sản trong chuỗi, bạn phải gửi kèm truy cập này với {}. Nếu không, PHP sẽ chỉ phân tích cú pháp biến số tối đa trước tiên[i] hoặc ->property.

Vì vậy, với "$this->author->last" thay vì "{$this->author->last}", PHP sẽ chỉ phân tích cú pháp và đánh giá $this->author cung cấp cho bạn lỗi là author là một đối tượng.

3

bạn không nên đặt $ trước tên thuộc tính khi bạn truy cập chúng:

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

Bạn đang cố gắng tự phản hồi một đối tượng, không phải là thuộc tính chuỗi của nó. Kiểm tra mã của bạn một cách cẩn thận.

2

Bạn có thể muốn sử dụng:

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

Tôi không nghĩ rằng bạn cần dấu $ khi sử dụng toán tử mũi tên.

1

Tôi nghĩ rằng một trong các đối tượng không có phương thức toString() được xác định để nó không thể được biểu diễn dưới dạng chuỗi.

Các vấn đề liên quan