Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie klas w skrypcie
Forum PHP.pl > Forum > Przedszkole
zdzichu
Witajcie. Od jakiegoś czasu bawię się OOP. Zgodnie z instrukcjami tworzę raczej małe klasy, odpowiedzialne za konkretne funkcje- i tak np. mam klasę obsługi bazy danych, obsługi błędów itp. Czasem jednak się zdarza, że wewnątrz jednej klasy muszę użyć innych (tutaj podeprę się przykładem klasy DB i Error).
Tak więc w konstruktorze muszę użyć
  1. <?php
  2. public function __construct(){
  3. $this-> db = new db(config::$db_encoding);
  4. $this->kernel = new kernel;
  5. $this->error= new error;
  6. }
  7. ?>

jest to troszkę niewygodne... czy jest jakiś sposób, by "pozbyć się" tego tworzenia w konkstruktorze zachowując jednocześnie możliwość używania klasy w klasie? szukałem już coś o interfejsach, jednak nie rozjaśniło mi to umysłu,i o ile dobrze widziałem to nie rozwiąze mojego problemu. Myślałem też by zrobić jedną klasę tylko z konstruktorem a potem tylko class (na przykład) DB extends nazwa_klasy_bazowej {(...) } jednak nie wiem czy jest ot najlepszy pomysł... ma ktoś jakieś pomysły jak rozwiązać mój problem?
UDAT
Trochę mętnie napisane, ale

  1. <?php
  2. public function __construct ( error $error, kernel $kernel ) {
  3. $this-> db = new db(config::$db_encoding);
  4. $this -> kernel = $kernel;
  5. $this -> error  = $error;
  6. }
  7. ?>


I teraz nie da się stworzyć klasy bez podania, obiektów klasy error i kernel, albo po nich dziedziczących.
Osobiście zamieniłbym error i kernel na to na interfejsy np. IError i IKernel, a potem:

  1. <?php
  2. interface IError {
  3. //minimalny interfejs klasy error wykorzystywany przez klasę DB
  4. }
  5.  
  6. interface IKernel {
  7. //minimalny interfejs klasy kernel wykorzystywany przez klasę DB
  8. }
  9.  
  10. class error implements IError {
  11. //tu zostawiasz starą implementację
  12. }
  13.  
  14. class kernel implements IKernel {
  15. //tu zostawiasz starą implementację
  16. }
  17.  
  18.  
  19. class DB {
  20.  public function __construct ( IError $error, IKernel $kernel ) {
  21. $this-> db = new db(config::$db_encoding);
  22. $this -> kernel = $kernel;
  23. $this -> error  = $error;
  24. }
  25. }
  26.  
  27. // Potem tworzysz klasę DB
  28. $db = new DB ( new error ( ), new kernel ( ) );
  29. ?>
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.