Działania na tablicy z wykorzystaniem ArrayObject
Tablice są jednym z podstawowych elementów programowania, bez których ciężko sobie wyobrazić pisanie jakiejkolwiek aplikacji. Pracując z tablicami w PHP można korzystać z podstawowych funkcji języka lub wykorzystać podejście obiektowe przy pomocy klasy ArrayObject.
Tablica jest to uporządkowany zbiór zmiennych w postaci klucz – wartość. Tablice w PHP tworzymy za pomocą wyrażenia array(), do którego przypisujemy kolejno klucze i wartości (lub same wartości – wtedy klucze ustawią się same).
1 2 3 4 5 6 |
$table = array( 'key_1' => 'Value 1', 'key_2' => 'Value 2', 'key_3' => 'Value 3', 'key_4' => 'Value 4' ); |
Klasa ArrayObject wprowadzona została w wersji PHP 5 i stanowi swego rodzaju opakowanie dla zwykłej tablicy oraz pozwala na jej wykorzystanie w stylu obiektowym. Wystarczy jedynie przekazać konstruktorowi obsługiwaną tablicę.
1 |
$tablica = new ArrayObject($tablica); |
Utworzony obiekt posiada szereg metod, pozwalających na wykonywanie działań na przekazanej tablicy. Ponadto możemy nadpisać klasę, zmieniając lub dopisując do niej nowe funkcjonalności.
- offsetExists($key) – określa czy istnieje element tablicy przypisany do wskazanego klucza
- offsetGet($key) – zwraca element tablicy
- offsetSet($key, $value) – dodaje element do tablicy
- offsetUnset($key) – usuwa element tablicy
- append($value) – pozwala na dodanie elementu, który zostanie umieszcony na końcu tablicy
Iteracja
Jednym z podstawowych działań programisty na tablicy jest iteracja, tzn. kolejne przechodzenie po elementach i wykonywanie na nich operacji (np. odpowiednie sformatowanie pozycji w tablicy oraz wyświetlenie go użytkownikowi). DO tego celu można użyć obiektu Iteratora.
Metoda getIterator() tworzy i zwraca objekt Iterator, co pozwala na przechodzenie po elementach tablicy z wykorzystaniem metod tego obiektu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$table = array( 'key_1' => 'Value 1', 'key_2' => 'Value 2', 'key_3' => 'Value 3', 'key_4' => 'Value 4' ); $table = new ArrayObject($table); $iterator = $table->getIterator(); while($iterator->valid()) { echo $iterator->key() . ' - ' . $iterator->current(); $iterator->next(); } |
- valid() – sprawdza czy itsnieje element tablicy, na który wskazuje wskaźnik iteratora
- key() – zwraca klucz elementu tablicy
- current() – zwraca wartość elementu tablicy
- next() – przesuwa wskaźnik iteratora na kolejny element tablicy
Rozszerzenie funkcjonalności
Klase ArrayObject możemy dowolnie rozszerzać, dodając nowe funkcjonalności. Poniższy przykład modyfikuje funkcję getOffset, doklejając do każdego zwracanego elementu tablicy, ciąg znaków przed i po. Ponadto dodaje magiczne funkcje __get oraz __set, pozwalające na pobieranie i dodawanie pozycji tablicy w pełni obiektowy sposób.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class ArrayToObject extends ArrayObject { public function getOffset($key) { return 'prefix '.$this[$key].' postfix'; } public function __get($key) { return $this->getOffset($key); } public function __set($key, $value) { $this[$key] = $value; } } |
Wykorzystując rozszerzoną funkcjonalność:
1 2 3 4 5 6 7 |
$table = new ArrayToObject(array()); //dodanie elementu do tablicy $table->key_1 = 'Value 1'; //wyświetlenie elementu tablicy, wynik: "prefix Value 1 postfix" echo $table->key_1; |
Podsumowanie
Korzystanie dobrodziejstw obiektowości podczas prac z tablicami, jest niezwykle wygodne oraz zwiększa czytelność tworzonego kodu. Ponadto pozwala w dowolny sposób rozszerzać oraz modyfikować sposób działania wykorzystywanych klas. Same plusy, dlatego zachęcam do korzystania :).