Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przeciążenie zmiennej... czy to możliwe ?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Black-Berry
Swego czasu kiedy pisałem w Delphi było tam jedno fajne rozwiązanie. Można było odwoływać się do elementów w ten sposób:
Kod
creator->items->add("item_1");
//można było również odwoływać się jak do tablicy
creator->items[1]->delete;

Czy można podobny interfejs zrobić w PHP ?
dr_bonzo
mozna, items jest obiektem, i implementujesz w nim ArrayAccess

edit: hmm, moze to kasowanie nie bedzie takie proste, bo items[ 1 ] zwroci ci inny obiekt (tzn ten item). Pozostaje taka opcja ze items[1] ustawia ci wewnetrzny wskaznik na pierwszy item, i zwraca obiekt creator, na ktorym wywolujesz delete() i on wtedy usuwa item o nr. 1.

tylko czemu nie zrobisz po prostu
creator->items->delete(1)?
Black-Berry
Takie rozwiązanie stosował Borland Delphi. Jeśli chodzi o obiektowość to chyba można powiedzieć, że to dobry wzór do naśladowania. Poza tym pamiętam, że świetnie się w tym pogramowało. Myślicie, że warto się na tym wzorować ?

@dr_bonzo mógłbyś napisać więcej jak uzystać taki interface?
Sedziwoj
Cytat(Black-Berry @ 6.03.2008, 00:20:59 ) *
Takie rozwiązanie stosował Borland Delphi. Jeśli chodzi o obiektowość to chyba można powiedzieć, że to dobry wzór do naśladowania. Myślicie, że warto się na tym wzorować ?


Moim zdaniem to nie dobry wzór do naśladowania. Bo to nie obiektowość, jak masz jakieś odwołania do tablic.
Do tego odwołanie "creator->items->delete(1)" ot items jest właściwością obiektu, a raczej nie powinno się do tego dopuszczać.
Moli
Możesz to zrobić w np. taki sposób
  1. <?php
  2.  
  3. class creator 
  4. {
  5. public function items ( $id )
  6. {
  7. return new items ( $id ) ;
  8. }
  9. }
  10.  
  11. class items 
  12. {
  13. private $id ;
  14.  
  15. public function __construct ( $id )
  16. {
  17. $this->id = $id ;
  18. }
  19.  
  20. public function delete ( )
  21. {
  22. echo 'DELETE = ' . $this->id ;
  23. }
  24. }
  25.  
  26. $c = new creator ;
  27.  
  28. $c->items(6)->delete ( ) ;
  29.  
  30. ?>

ale tak samo jak poprzednicy uważam że takie rozwiązanie jest mało przyjazne.

ps. Kod to tylko przykład.
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.