2009-04-16 32 views
90

Tôi đang sử dụng lớp PHP mà ai đó đã viết để giao tiếp với API BaseCamp.Làm cách nào để truy cập thuộc tính đối tượng này bằng tên được gạch nối?

Cuộc gọi cụ thể mà tôi đang thực hiện là truy xuất các mục trong danh sách việc cần làm, hoạt động tốt.

Vấn đề của tôi là, tôi không chắc chắn cách truy cập chỉ thuộc tính todo-items của đối tượng được trả về. Đây là var_dump của đối tượng được trả về:

object(stdClass)[6] 
    public 'completed-count' => string '0' (length=1) 
    public 'description' => string 'Description String' (length=89) 
    public 'id' => string '12345' (length=7) 
    public 'milestone-id' => string '' (length=0) 
    public 'name' => string 'Error Reports' (length=13) 
    public 'position' => string '1' (length=1) 
    public 'private' => string 'false' (length=5) 
    public 'project-id' => string '58904' (length=7) 
    public 'tracked' => string 'false' (length=5) 
    public 'uncompleted-count' => string '1' (length=1) 
    public 'todo-items' => 
    object(stdClass)[3] 
     public 'todo-item' => 
     object(stdClass)[5] 
      public 'completed' => string 'false' (length=5) 
      public 'content' => string 'content string here' (length=133) 
      public 'created-on' => string '2009-04-16T20:33:31Z' (length=20) 
      public 'creator-id' => string '23423' (length=7) 
      public 'id' => string '234' (length=8) 
      public 'position' => string '1' (length=1) 
      public 'responsible-party-id' => string '2844499' (length=7) 
      public 'responsible-party-type' => string 'Person' (length=6) 
      public 'todo-list-id' => string '234234' (length=7) 
    public 'complete' => string 'false' (length=5) 

Làm cách nào để truy cập vào phần todo-items của đối tượng này?

Trả lời

206
<?php 
$x = new StdClass(); 
$x->{'todo-list'} = 'fred'; 
var_dump($x); 

Vì vậy, $ object -> {'todo-list'} là đối tượng phụ. Nếu bạn có thể đặt nó như thế, thì bạn cũng có thể đọc nó theo cùng một cách.

Nếu bạn muốn chuyển đổi thành mảng, có thể dễ dàng hơn một chút (nghĩa là truy cập $ ret ['todo-list'] rõ ràng), mã này được lấy gần như nguyên gốc từ Zend_Config và sẽ chuyển đổi cho bạn .

public function toArray() 
{ 
    $array = array(); 
    foreach ($this->_data as $key => $value) { 
     if ($value instanceof StdClass) { 
      $array[$key] = $value->toArray(); 
     } else { 
      $array[$key] = $value; 
     } 
    } 
    return $array; 
} 
+0

theeeere chúng tôi đi, đó là cú pháp tôi đang tìm kiếm. cảm ơn! – Ian

+23

Mặc dù đó là ngắn và ngọt (và những gì tôi muốn đề nghị), bạn cũng có thể làm điều này thông qua các biến: '$ todolist = 'todo-list'; $ x -> $ todolist' – Christian

+0

* Phản hồi rất muộn *, với PHP> 5.5, có giải pháp tốt hơn. Hoặc là 'cast' đối tượng vào một mảng, hoặc thử' get_object_vars() '. –

23

Hãy thử cách đơn giản nhất!

$obj = $myobject->{'mydash-value'}; 
$objToArray = array($obj); 
+3

Câu trả lời hay kèm theo các mẫu mã với giải thích cho người đọc trong tương lai. Trong khi người hỏi câu hỏi này có thể hiểu được câu trả lời của bạn, giải thích cách bạn đến với nó có thể giúp vô số người khác. – Stonz2

+1

Oh đây là câu trả lời REAL. Tôi đã cố gắng mãi mãi để truy cập vào một tên thuộc tính đối tượng với một '.' trong đó và điều này làm sạch mà phải lên! – russellmania

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