Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: korzystanie z klas w klasie
Forum PHP.pl > Forum > PHP > Object-oriented programming
SaMi
Witam,
mam kilka klas każda odpowiada za inną funkcjonalność powiedzmy:

  1. Class Sql {
  2.  
  3. }
  4. Class View {
  5.  
  6. }
  7. Class Messages {
  8.  
  9. }
  10. /*Klasa bazaowa*/
  11. Classs Base {
  12.  
  13. }

W klasie Base chcę korzystać z pozostałych trzech. I teraz pytanie jak to zrobić? jedno z rozwiązań jakie przyszły mi do głowy to w konstruktorze klasy Base zainicjować je:

  1.  
  2. require_once('Sql.class.php');
  3. require_once('View.class.php');
  4. require_once('Messages.class.php');
  5.  
  6. Class Base {
  7. function __construct(){
  8. $sql=new Sql();
  9. $view=new View();
  10. $msg=new Messages();
  11. }
  12. }
  13.  


Ale może są lepsze rozwiązania. Ale jeśli mam kilka modułów i każdy z nich ma własny plik Base.class.php z klasą base bo przy każdym module każdorazowo muszę je inicjować. I nie jestem pewny czy jest to dobre rozwiązanie.
Zyx
Podstawy obiektówki się kłaniają. Klasa może dziedziczyć po co najwyżej jednej w klasie. Podstawy projektowania obiektowego się kłaniają. Klasa powinna być odpowiedzialna za tylko jedną rzecz, zatem próba połączenia "View", "Sql" i "Messages" w jednej klasie to głupota. Podstawy korzystania z obiektówki się kłaniają - od takich rzeczy są obiekty. Tworzysz sobie niezależnie Sql, View i Messages, a następnie wstrzykujesz je jako argumenty konstruktora.

Wreszcie, podstawy dobrego stylu się kłaniają. Korzystaj z automatycznego ładowania klas i wstawiaj modyfikatory dostępu public przed metody i pola publiczne.
kiler129
Cytat(Zyx @ 18.03.2011, 16:12:57 ) *
Wreszcie, podstawy dobrego stylu się kłaniają. Korzystaj z automatycznego ładowania klas i wstawiaj modyfikatory dostępu public przed metody i pola publiczne.


Z ciekawości coby nie robić nowego tematu: po co stawiać public przed metodami publicznymi skoro domyślnie są publiczne oraz pisać "public $foo" a nie "var $foo"?
To jakby odwoływać się do funkcji podając wszystkie domyślne argumenty - skoro domyślnie jest public to po co to zapisywać?
darko
Włącz raportowanie błędów na poziomie przynajmniej STRICT, a będziesz wiedział. Inną sprawą jest samo0dokumentujący się kod i lepsza dokumentacja.
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.