Dizi dönüştürmek için, özelliklerini nesne, nesne yapıcı geçirilen?

2 Cevap

Ne bunu yapmak mümkün sınıfa koymak gerekir?

$data = array(
 'a' => 12345,
 'b' => 67890,
);

$object = new Class($data);

echo $object->a; //outputs 12345
echo $object->b; //outputs 67890

2 Cevap

Ignacio Vazquez-Abrams'ın cevabı güzel, ama ben bu şekilde ayarlanmasına izin istiyorum niteliklerin bir beyaz tercih ediyorum:

foreach(array('attribute1', 'attribute2') as $attribute_name) {
    if(array_key_exists($attribute_name, $data)) {
        $this->$attribute_name = $data[$attribute_name];
    }
}

Emin olun bu şekilde hiçbir özel nitelikleri ayarlanır.

Sadece nesne sözdizimi sonra eğer Alternatif, bunu yapabilirsiniz:

$object = (object) $data;
$object = $data->a // = 12345

Bu StdClass içine dizi coercing edilir.

Lütfen usecase bağlı, bu da verilen çözümlere bir alternatif olabilir:

class A extends ArrayObject {}

Bu şekilde, dizideki tüm özellikleri nesne notasyonu ve dizi gösterimde, örneğin erişilebilir olacak

$a = new A( array('foo' => 'bar'), 2 ); // the 2 enables object notation
echo $a->foo;
echo $a['foo'];

Eğer sınıf bildirimi görebileceğiniz gibi, ArrayObject bir dizi gibi sınıfını kullanmak için izin arayüzleri bir dizi uygular:

Class [ <internal:SPL> <iterateable> class ArrayObject 
    implements IteratorAggregate, Traversable, ArrayAccess, Countable ]

Ayrıca dizi erişim yeteneklerini tamamlamak için bir dizi yöntem ekler. Gibi başta dediğim gibi, bu usecase arzu olmayabilir, örneğin Eğer sınıf bir dizi gibi davranmak istemiyorum.