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
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.