Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Łączenie klas w skrypcie
zdzichu
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 28.08.2006

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


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?
Go to the top of the page
+Quote Post
UDAT
post
Post #2





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


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. ?>
Go to the top of the page
+Quote Post

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: 21.12.2025 - 00:29