Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak przeładować konstruktor
enigma
post
Post #1





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

Ostrzeżenie: (0%)
-----


mam klasę w której chciałbym mieć przeładowany konstruktor, i zastanawiam sie jak to zrobić. jeden wywoływany z jednym parametrem(tablica), a drugi z 6 zmiennymi. Nie wiem czy bawić się tu w zliczanie argumentów func_num_args, czy też funkcją __call() [tylko ie bardzo wiem jak ją zapisać]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
athabus
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Chyba chodzi ci o przeciążenie a nie przeładowanie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Jak już pewnie wiesz w php nie da się tego zrobić po ludzku i trzeba się uciec do kombinowania, które zazwyczaj psuje czytelność kodu.

Ja osobiście w większości takich przypadków używam osobnej meteody/metod statycznych, które są odpowiedzialne za tworzenie obiektu. Sam konstruktor zawsze przyjmuje określone parametry - najczęściej tablicę asocjacyjną. Oprócz tego istnieje osobna klasa z metodami static, która odpowiednio inicjuje obiekt w zależności od potrzeb czyli np. mam klasę produkt z konstruktorem

  1. <?php
  2. __construct($paramsArray)
  3. ?>


a do tego osobną klasę z metodami static takimi jak np:

  1. <?php
  2. public static function getById($intId)
  3. {
  4. //np. odczytanie parametrów z bazy i wywolanie konstruktora
  5. }
  6. ?>

itd itp.

Nie wiem czy tak jest poprawnie, ale wydaje mi się to najbardziej przejrzystą metodą, która pozwala na łatwe rozszerzanie, gdyby w przyszłości okazało się, że potrzebuję innego sposobu na wywołanie obiektu.

Oczywiście ten schemat stosuję tylko w wypadku skomplikowanych obiektów. W przypadku, gdy jest jakiś prosty obiekt i 2 warianty jego tworzenia - tj. z bazy lub z tablicy, stosuje coś jak ActiveRecord. Stworzyłem takie małe rozwiązanie oparte o ZF, gdzie mogę szybko definiować obiekty wskazując ich pola, i potem inicjować je przekazując listę wartości tych pól lub rekord odczytany z bazy.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 21:22