Bu nesne özelliğine geçersiz bir adla nasıl erişebilirim?


115

Birinin BaseCamp API ile arayüz oluşturmak için yazdığı bir PHP sınıfını kullanıyorum.

Yaptığım belirli çağrı, iyi çalışan bir yapılacaklar listesindeki öğeleri geri almak.

Benim sorunum, sadece todo-itemsdöndürülen nesnenin özelliğine nasıl erişeceğimi bilmiyorum . Döndürülen nesnenin var_dump'ı şöyledir:

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)

todo-itemsBu nesnenin bir kısmına nasıl erişebilirim ?

Yanıtlar:


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

Öyleyse, $object->{'todo-list'}alt nesne. Bunu böyle ayarlayabilirseniz, aynı şekilde de okuyabilirsiniz:

echo $x->{'todo-list'};

Bir başka olasılık:

$todolist = 'todo-list';
echo $x->$todolist;

Eğer onu biraz daha kolay (yani bariz $ret['todo-list']erişim) bir diziye dönüştürmek istiyorsanız , bu kod neredeyse harfi harfine Zend_Config'den alınır ve sizin için dönüştürülür.

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

24
Bu kısa ve tatlı olmasına rağmen (ve benim tavsiye ettiğim şey), bunu değişkenler aracılığıyla da yapabilirsiniz:$todolist='todo-list'; $x->$todolist
Christian

Çok geç yanıt , PHP> 5.5 ile daha iyi çözümler var. Ya castbir dizi ya da deneyin nesne get_object_vars().
Owen Beresford

1
@christian Çok güzel! Ama $ x -> {$ todolist}
James Bailey,

@JamesBailey, doğru. Bazı nedenlerden dolayı, o zamanlar bunun yalnızca PHP'nin daha yeni sürümlerinde mevcut olduğunu düşünmüştüm, ama görünüşe göre bir süredir orada: 3v4l.org/nf15N
Christian

28

Bu en basit yolu deneyin!

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

4
İyi yanıtlar, gelecekteki okuyucular için bir açıklama ile kod örneklerine eşlik eder. Bu soruyu soran kişi cevabınızı anlayabilse de, ona nasıl ulaştığınızı açıklamak sayısız kişiye yardımcı olabilir.
Stonz2

2
Oh bu GERÇEK cevap. Sonsuza kadar '.' İle bir nesne özelliği adına erişmeye çalışıyordum. içinde ve bu onu temizledi!
russellmania
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.