Bu gibi benim nesne ayarlamak gerekiyor:
$obj->foo = 'bar';
Bu ayarlandıktan sonra sonra ben gerçek olamayacak kadar aşağıdaki gerekir
if($obj['foo'] == 'bar'){
//more code here
}
Uzanan try ArrayObject
Nesneleri ve diziler karıştırma ediyoruz. Bunu gibi bir dizi oluşturmak ve erişebilirsiniz:
$obj = new stdClass;
$obj->foo = 'bar';
if($obj->foo == 'bar'){
// true
}
böylece gibi ve bir dizi:
$obj = new Array();
$obj['foo'] = 'bar';
if($obj['foo'] == 'bar'){
// true
}
Eğer bir sınıf tanımlamak ve bir dizi ve bir sınıf olarak hem kendi sınıf erişmek istiyorsanız ArrayAccess uygular ekleyebilirsiniz.
Sen ArrayAccess
interface to be able to do that -- which only means implementing a few (4 to be exact) basit yöntemleri uygulamak gerekir:
ArrayAccess::offsetExists
a>: olsun ya da olmasın bir var ofset.ArrayAccess::offsetGet
a>: offset belirtilen de değerini döndürür.ArrayAccess::offsetSet
a>: belirtilen ofset bir değer atar.ArrayAccess::offsetUnset
a>: Bir konumu boşaltır.Manuelin sayfasında ben işaret tam bir örnek vardır ;-)
ArrayObject ArrayAccess arabirimi (ve biraz daha fazla) uygular. ARRAY_AS_PROPS bayrağını kullanarak o aradığınız işlevsellik sağlar.
$obj = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
$obj->foo = 'bar';
echo $obj['foo'];
Alternatif olarak, kendi sınıflarından birini ArrayAccess arabirimini uygulayabilirsiniz:
class Foo implements ArrayAccess {
public function offsetExists($offset) {
return isset($this->$offset);
}
public function offsetGet($offset) {
return $this->$offset;
}
public function offsetSet($offset , $value) {
$this->$offset = $value;
}
public function offsetUnset($offset) {
unset($this->$offset);
}
}
$obj = new Foo;
$obj->foo = 'bar';
echo $obj['foo'];