![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Mam pytanie czy w php5 da się przeciążyć konstruktor? Generalnie wiem, że można przeciążać dowolną funkcję za pomocą __call, ale z konstruktorem jakos mi nie wychodzi (IMG:http://forum.php.pl/style_emoticons/default/mad.gif)
Próbowałem zarówno użyć __construct jak i NazwaKlasy przy przeciążaniu w __call i nic z tego. Czy ktos wie jak można przeciążyć konstruktor? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 1 Dołączył: 29.09.2008 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
To oczywiście zależy w jakim miejscu budujemy taki obiekt. Możemy przecież zbudować go bezpośrednio wywołując metodę konkretną z fabryki w klasie klienta. Wtedy nie ma w ogóle potrzeby korzystania z 'if'. Podam przykład który zobrazuje o co mi chodziło:
CODE // Dla fabryki: class JakisKontroler{ $arr['wypelniacz1'] = $_POST['wypelniacz1']; $arr['wypelniacz2'] = $_POST['wypelniacz2']; $obj = $objFabrykaKlasyA->zbudujZtablicy($arr); } // sposób na "if'y" class JakisKontroler{ public function wykonajCos(){ $arr['wypelniacz1'] = $_POST['wypelniacz1']; $arr['wypelniacz2'] = $_POST['wypelniacz2']; $obj = new KlasaA($arr); // w konstruktorze wykonuja sie warunki } } Jak widać w pierwszym przypadku w ogóle nie ma 'if' a jedynie wywołanie konkretnej metody, ściśle określonej. Dodatkowo odciążamy klasę od odpowiedzialności budowania obiektu z samej siebie. Klasa moim zdaniem powinna przejmować się tym co ma robić, a nie tym w jaki sposób ma sie "rodzić" - od tego powinny być inne obiekty (oczywiście nie w każdym przypadku ale akurat w tym tak). Co więcej uznaje za złe stosowanie przeciążania ponieważ jest ono niejednoznaczne i łatwo można zapomnieć jakie parametry stosować aby otrzymać to co chcemy, przy stosowaniu metod taki problem nie istnieje bo jest wszystko jasne i przejrzyste. Jest jeszcze kwestia tego, że przecież nie tylko możemy ustawiać zmienne w tworzonym obiekcie ale wykonywać bardziej złożone operacje podczas budowania obiektu. Więc lepiej trzymać się jednej metodyki wtedy projekt staje się spójny. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 08:17 |