Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeciążenie obiektu klasy
Forum PHP.pl > Forum > PHP
Pucy
Witam, chcialbym zmienic obiekt klasy:)
  1. class Pudelko {
  2.  
  3.  
  4. public function __construct()
  5. {
  6. // Pobieram z bazy lub skad kolwiek informacje o typie pudelka
  7. switch($this->pobrane_dane)
  8. {
  9. case 'kwadratowe':
  10. $this = new Kwadratowe;
  11. break;
  12. }
  13.  
  14.  
  15. }
  16.  
  17. }
  18.  
  19. class Kwadratowe extends Pudelko {
  20.  
  21. protected $jakie = 'kwadratowe';
  22. }
  23.  
  24. class Owalne extends Pudelko {
  25.  
  26. protected $jakie = 'owalne';
  27. }


i teraz problem zaczyna sie tutaj:
Tworze obiekt klasy pudelko i pobieram z informacje jakiego typu jest to pudelko i ogolnie chodzi oto zeby przeladowac tworzony obiekt innym obiektem.
Czyli aby w podanym przykladzie tworzenie obiektu Pudelko (ktory gdzies tam ma informacje o jego typie) tak naprawde zwrocil (stworzyl) obiekt klasy Kwadratowe.

Mozna to jakos zrobic?
wdev
To czego szukasz, jest znane pod nazwą wzorca projektowego Fabryka. Nie powinieneś przeciążać obiektu, ale zwracać nowy obiekt. Potrzebne ci jest coś w stylu:
  1. class FabrykaPudełek
  2. {
  3. public static function stworzPudelko($typ)
  4. {
  5. switch ($typ)
  6. {
  7. case 'kwadratowe':
  8. return new Kwadratowe();
  9. break;
  10. }
  11. }
  12. }
  13.  
  14. $pudelko = FabrykaPudelek::stworzPudelko('kwadratowe');
Pucy
Ale ja wlasnie korzystam z fabryki i zalozeniem jest ze przy tworzeniu (w momencie tworzenia nie mam typu lub nie ja go podaje) wiec $pudelko = FabrykaPudelek::stworzPudelko('kwadratowe');
ale chyba i tak mi cos uswiadomiles wiec sproboje cos innego
wdev
A co robisz z tym obiektem zanim poznasz jego konkretną klasę?
Pucy
On ogolnie jest tworzony za pomoca klasy ORM:: w kohana 3.

Tutaj przedstawilem ejszcze pewne rozwiazanie do przeladowania klasy factory http://dev.kohanaframework.org/issues/3559 ale to i tak nie jest to czego ja oczekuje.

Wymyslilem po prostu tak:

Przeladowalem funckje __call i po prostu w przypadku gdy bede staral sie pobrac jakies dane z konkretnego modelu typu testu, to bede je pobeiral za pomoca metod tego modelu. Moze osiagne to czego oczekuje.


Ale najlepszym rozwiazaniem vbyloby jednak jakiekowliek przeladowanie obiektu $this w zaleznosci od pewnego parametru. Eh.
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.