Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ArrayObject - Czy używać jak i kiedy oraz jak z wydajnością?
Forum PHP.pl > Forum > PHP > Object-oriented programming
starach
Cześć,

Coraz bardziej zastanawiam się nad zaczęciem rozszerzania ArrayObject w klasach robiących za kolekcje. Ciekawi mnie jak to jest z wydajnością w tym przypadku i czy nie lepiej żebym pozostał przy starej sprawdzonej metodzie implementacji Iteratora, a potem martwienia się czy nie potrzebne będą przypadkiem dodatkowa funkcjonalność.

Co o tym sądzicie?
erix
Cytat
Coraz bardziej zastanawiam się nad zaczęciem rozszerzania ArrayObject w klasach robiących za kolekcje. Ciekawi mnie jak to jest z wydajnością w tym przypadku i czy nie lepiej żebym pozostał przy starej sprawdzonej metodzie implementacji Iteratora, a potem martwienia się czy nie potrzebne będą przypadkiem dodatkowa funkcjonalność.

U siebie stosuję ArrayObject w kolekcjach i nie zauważyłem różnicy w wydajności.
LSM
Może wstyd się przyznać bo to nie będzie "pro" ale nie stosuję jeszcze SPL być może mało wiem o jego zaletach choć czytałem już troszku kiedyś tam uh...

Jednak gdy widzę:

$array = array('one', 'two', 'three');
$arrayObj = new ArrayObject($array);

to zastanawiam się czy nie jest to przerost formy nad treścią.

Po za tym nie można stosować większości funkcji przydatnych dla tablic jeśli zastosujemy SPL.
Ale głębszych rozmyślań w temacie nie posiadam. smile.gif

Czy więc używać ? Ja nie używam wink.gif
starach
Kolekcje o które mi chodzi i tak powinny być obiektami, bo wykonuję na nich specyficzne operacje, które idealnie nadają się na metody ich własnych klas.
melkorm
  1. $array = array('one', 'two', 'three');
  2. $arrayObj = new ArrayObject($array);


To nie jest zbyt dobry przykład wink.gif

Tu bardziej chodzi o Literowanie po kolekcjach obiektów na których możesz użyć foreach itp. np.: Zend_Db_Table_Rowset wink.gif
smentek
Interfejsy wchodzące w skład ArrayObject warto implementować TYLKO w przypadkach kiedy znacząco upraszcza to kod, który w innym wypadku był by bardziej złożony. Czyli jedynie od pewnego progu złożoności tego co chcesz oprogramować. W praktyce rzadko.

Podstawowym minusem jest fakt, że dla tego typu kolekcji nie można użyć większości z metod działających na tablicach.

PHP ma tą przewagę nad np. Javą, że możesz posługiwać się tablicami asocjacyjnymi, które są dużym uproszczeniem w stosunku do Kontenerów z Javy. Wprowadzając ArrayObject tam gdzie nie jest potrzebne, rezygnujesz z tego dobrodziejstwa PHP, a zyskujesz coś co jest tylko namiastką tego co oferuje platforma Javy.
Crozin
@smentek: Cztery interfejsy implementowane przez ArrayObject to chyba cztery najpopularniejsze interfejsy w całym PHP, co więcej w przypadku gdy tworzy się jakiś kontener wręcz ciężko sobie wyobrazić by ich nie było. Nie wiem też po co wrzucałeś tutaj w ogóle Javę, ale istnieje w niej dokładnie to samo, tj. HashMap, który podobnie jak PHP-owe tablice jest implementacją HashTable'a.

Co do samego ArrayObject. Jeżeli pasuje Ci cały interfejs tej klasy, włącznie ze śmieciami od sortowania to jak najbardziej możesz z tego korzystać. Szczególnie, że wydajność jest bardzo zbliżona do tablic.
smentek
Zgadzam się, Chodzi mi jedynie o to, siłą PHP jest prostota użycia. Co do kolekcji Javy myślę, że warto o nich wspomnieć, i zapoznać bo może to zaprocentować także w PHP.
Fifi209
Cytat(melkorm @ 17.06.2011, 10:22:06 ) *
Tu bardziej chodzi o Literowanie po kolekcjach obiektów

Ooo nowy termin "literowanie", co to oznacza w programowaniu? Bo chyba zacofany jestem.
melkorm
@offtopic
Cytat
Ooo nowy termin "literowanie", co to oznacza w programowaniu? Bo chyba zacofany jestem.


jakbym się czepiał każdej takiej literówki / przejęzyczenia to bym miał 10k postów.
starach
Kolega @melkorm to po prostu pisał kiedy był naLiterowany, więc mu się skojarzyło. wink.gif

Dobra to będę dalej ArrayAccess i Iterator implementował. Olać ArrayObject.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.