Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa, dziedzieczenie, singleton i interfejs - poprawność konstrukcji
atze_
post 26.09.2008, 12:21:03
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.03.2008

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


Witam,

Mam następujący kod:

  1. <?php
  2. interface ContentInterface {
  3.    public function get_content_list($start, $offset);
  4. }
  5.  
  6. abstract class Content
  7. {
  8.    protected $_classname;
  9.    protected $_foto;
  10.    protected $_file;
  11.    protected $_movie;
  12.  
  13.    protected function __construct() {
  14.        $this->_foto = Fotosingleton();
  15.        $this->_file = Filesingleton();
  16.        $this->_movie = Moviesingleton();
  17.    }
  18.  
  19.    public function get_foto() {}
  20.  
  21. }
  22.  
  23. class Page extends Content implements ContentInterface
  24. {
  25.    private static $instance;
  26.  
  27.    protected function __construct() {
  28.        $this->_classname = 'page';
  29.        parent__construct();        
  30.    }
  31.  
  32.    public static function singleton() {
  33.        if (!isset(self$instance)) {
  34.            $c = __CLASS__;
  35.            self$instance = new $c;
  36.        }
  37.        return self$instance;
  38.    }
  39.  
  40.    public function __clone() {
  41.        trigger_error('Klonowanie zabronione.', E_USER_ERROR);
  42.    }
  43.  
  44.    public function get_content_list($start, $offset) {}
  45.    public function add($start, $offset) {}
  46.     public function edit($start, $offset) {}
  47.     public function view($start, $offset) {}
  48.     public function form($start, $offset) {}
  49.  
  50. }
  51. ?>


Klasa Page(jak i inne klasy np. News, Faq) dziedziczy po Content obsługę pobierania z bazy, uploadu nowych zdjęć, plików i załączników. W każdym module strona|aktualności|faq będzie można do treści strony dodać zdjęcia w galerii, załączniki i filmy, więc chce ograniczyc ilość kodu odpowiadającego za te czynności. Dodatkowo poprzez interfejs chce wskazać jakie wymagane przez moduł metody muszą znajdować się w klasie - tworzenie nowego modułu przez drugiego programistę.

Nie jestem pewien czy ta konstrukcja jest poprawna. Mógłby ktoś zerknąć.
Go to the top of the page
+Quote Post
Cysiaczek
post 26.09.2008, 15:26:02
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




W tym konkretnym przypadku ja bym umieścił metodę get_content_list() jako metodę abstrakcyjną w klasie abstrakcyjnej Content.
Ten kod jest... nieaktywny, bo użytkownik musi ręcznie zadeklarować, że implementuje interfejs ContentInterface. Co jeśli tego nie zrobi? Otóż nic - kod zadziała (i gdzieś tam dalej się wysypie).
Ewentualnie, jeśli zależy Ci na tym, aby interfejs pozostał jako osobny byt, proponuję następującą modyfikację
  1. <?php
  2. abstract class Content implements ContentInterface
  3. ?>


Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 10:25