W poście postaram się przedstawić metody, dzięki którym dostęp do właściwości obiektu, będzie identyczny jak w przypadku tablic.
Na początku załóżmy że mamy prostą klasę.
class Iterujemy {
public $a;
public function __construct () {
$this->a = 1;
}
}
W tym przypadku aby zmienić właściwość $a, musimy użyć następującego zapisu:
$obj = new Iterujemy(); $obj->a = 5;
A co powiecie, abyśmy umożliwili sobie dostęp do właściwości w ten sposób:
$obj = new Iterujemy(); $obj['a'] = 5;
Interfejs ArrayAccess
Wszystko co nam potrzebne do szczęścia to zaimplementowanie interfejsu ArrayAcces dla naszej klasy Iterujemy. Posiada on 4 funkcje:
- offsetExists ($name)
- offsetSet ($name,$value)
- offsetGet ($name)
- offsetUnset ($name)
Przykład użycia:
class Iterujemy implements ArrayAccess {
public $a = 6;
public function __construct () {
}
public function offsetExists ($name) {
if (isset($this->$name))
return TRUE;
else
return FALSE;
}
public function offsetUnset ($name) {
unset($this->$name);
}
public function offsetGet($name) {
return $this->$name;
}
public function offsetSet($name,$value) {
$this->$name = $value;
}
}
Wyjaśnijmy sobie działanie poszczególnych funkcji:
public function offsetExists ($name) – sprawdza czy istnieje właściwość $name.
public function offsetUnset ($name) – usuwa właściwość $name.
public function offsetGet ($name) – zwraca wartość właściwości $name.
public function offsetSet ($name,$value) – ustawia wartość właściwości $name na $value.
I w ten prosty sposób mamy dostęp do własciwości obiektu klasy, jak do tablicy.Należy pamiętać, że jest to możliwe tylko dla modyfikatora public.
4 Odpowiedzi : “obiekty jak tablice w PHP cz. 1”


Jesteś pewny, że w tych funkcjach ma być
$this->$name? Przecież odwołujesz się do parametru funkcji, a nie do składnika klasy, bo takiego składnika tam zresztą nie maW PHP można dynamicznie dla obiektu klasy tworzyć jego właściwości. Cytowany zapis szuka właściwości o nazwie zawartej w zmiennej $name. Przykład TUTAJ. Mam nadzieje, że wyjaśni. Czekam na ewentualne pytania.
Piszesz
„Należy pamiętać, że jest to możliwe tylko dla modyfikatora public.”
Nie do końca jest to prawda
gdyż w zapisie $obj['b'] = 5; nasz dostęp do pol typu protected, privet
Sprawdzone PHP 5.3.5
Zdecydowanie moje przeoczenie. Dzięki!