PHP diziler gibi nesneleri başlayamadı?

5 Cevap

PHP, hızlı aşağıdaki gösterimi kullanılarak değerlerle diziler başlatılamıyor:

$array = array("name" => "member 1", array("name" => "member 1.1") ) ....

is there any way to do this for STDClass objects? I don't know any shorter way than the dreary

$object = new STDClass();
$object->member1 = "hello, I'm 1";
$object->member1->member1 = "hello, I'm 1.1";
$object->member2 = "hello, I'm 2";

5 Cevap

İşte both type casting and using a recursive function, standart bir nesneye tek ve çok boyutlu diziler dönüştürmek gösteren bir yazı var.

Sen tipi döküm kullanabilirsiniz:

$object = (object) array("name" => "member 1", array("name" => "member 1.1") );

Eğer deneyebilirsiniz:

function initStdClass($thing) {
    if (is_array($thing)) {
      return (object) array_map(__FUNCTION__, $thing);
    }
    return $thing;
}

Ben de tercih edilen çözüm olarak bamya kadar olarak ama ne o önerdi member1o daha member1a gibi görünüyor neden olarak bazı karışıklıklara yol açabilir sordu, ne tam olarak değil.

Bu artık açık olmasını sağlamak için, iki yol (şimdi 5.4 beri 3 yolu) php aynı stdClass üretmek.

  1. Soru bu uzun veya manuel bir yaklaşımla başına:

    $object = new stdClass;
    $object->member1 = "hello, I'm 1";
    $object->member1o = new stdClass;
    $object->member1o->member1 = "hello, I'm 1o.1";
    $object->member2 = "hello, I'm 2";
    
  2. Gumbo öneri ala, bir diziden bir nesne artığını (netlik için burada genişletilmiş) kısa veya tek hat versiyonu.

    $object = (object)array(
         'member1' => "hello, I'm 1",
         'member1o' => (object)array(
             'member1' => "hello, I'm 1o.1",
         ),
         'member2' => "hello, I'm 2",
    );
    
  3. PHP 5.4 + Kısaltılmış dizi beyan tarzı

    $object = (object)[
         'member1' => "hello, I'm 1",
         'member1o' => (object)['member1' => "hello, I'm 1o.1"],
         'member2' => "hello, I'm 2",
    ];
    

Ikisi de aynı sonucu üretecektir:

stdClass Object
(
    [member1] => hello, I'm 1
    [member1o] => stdClass Object
        (
            [member1] => hello, I'm 1o.1
        )

    [member2] => hello, I'm 2
)

nJoy!

Ben Dict isim bir sınıf kullanmak:

class Dict {

    public function __construct($values = array()) {
        foreach($values as $k => $v) {
            $this->{$k} = $v;
        }
    }
}

Ayrıca diğer nesneler ve diziler ile birleştirilmesi için fonksiyonları vardır, ama bu tür bu sorunun kapsamı dışında bulunuyor.