Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zmiana metody klasy jeśli istnieje
sannin
post
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Witam,

napisałem cms który ma tam jakieś moduły i są one ofertą podstawową. Użytkownicy zakładając konta pracują na tych samych plikach, ale osobnych bazach. Jednak są użytkownicy którzy potrzebują jakieś dodatkowe funkcje. Zrobiłem tak po to, żeby uniknąć po tysiąc krotnego poprawiana tych samych plików w razie wystąpienia błędu. Ale wracając do tematu, jest użytkownik który chcę dodatkową funkcję... całość jest napisana obiektowo. W podstawowym pakiecie powiedzmy jest dodawanie artykułów i jest to klasa Artykuly metoda dodaj. Pewien użytkownik chcę mieć możliwość dodawania razem z treścią zdjęć. Wymyśliłem coś takiego w katalogu modifications są podkatalogi user1, user2 z zmodyfikowanymi plikami. Teraz tak w pliku podstawowym Artykuly.Controller.php mamy:

  1. Class Artykuly {
  2. public function dodaj() {
  3. // kod
  4. }
  5.  
  6. public function dodaj() {
  7. // kod
  8. }
  9. }


w pliku modification/users1/Artykuly.Controller.php mamy:

  1. Class Artykuly {
  2. public function dodaj() {
  3. // inny kod
  4. }
  5. }
  6.  


Jak zrobić teraz żeby w klasie podstawowej zmieniła się tylko funkcja dodaj? Czy może ktoś zna jakieś inne lepsze rozwiązanie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Po prostu sprawdzaj czy user ma plik: modification/users1/Artykuly.Controller.php jesli go ma zmienasz kontroler i tyle zrob to na podstawie interfejsow i api bd to samo.
Go to the top of the page
+Quote Post
sannin
post
Post #3





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Akurat to wiem tylko nie chcę znów przepisywać całego pliku, a ewentualnie metodę. Możesz powiedzieć mi coś więcej na temat interfejsów i api?
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie musisz przepisywac calego pliku skoro: modification/users1/Artykuly.Controller.php to jest jakis dodatek to mozesz zrobic tak kazdy dodatek jak bedziesz pisal ma dziedziczy z klasy podstawowej czyli w tym przypadku:
Klasa podstawowa: Artykuly
Klasa rozszerzajaca: Artykuly ale jest inna sciezka pliku bo modification/users1/Artykuly.Controller.php.

Czyli teraz jak masz kontroler modification/users1/Artykuly.Controller.php includuj do niego glowna klase kontrolera Artykulow po czym robisz:

  1. class AddonsArtykuly extends Artykuly {
  2.  
  3. public function dodaj() {
  4.  
  5. // rozszerzasz funkcjonalnosci funkcji dodaj a reszta funckji zostaje taka sama.
  6.  
  7. }
  8.  
  9. }

Teraz przed utworzeniem obiektu artykuly i wywolania metody sprawdzasz czy istnieje plik: modification/users1/Artykuly.Controller.php jesli tak includujesz go i inicjuesz ta sama klase z sufix'em Addons.

Rozumiesz?To najprostszy sposob jaki przychodzi mi do glowy.
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


W modyfikacje/uzytkownik_1/abc.php:
  1. <?php
  2.  
  3. class u1Artykuly extends Artykuly{
  4. //tutaj nadpisujesz jakies metody
  5. }
A autoloader niech zadba o to by w przypadku, gdy istnieje wczytywany był plik z modyfikacje/*

EDIT: uprzedzony (IMG:style_emoticons/default/smile.gif)

Ten post edytował Crozin 20.09.2009, 15:36:27
Go to the top of the page
+Quote Post
sannin
post
Post #6





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Myślałem nad czymś takim, ale czy w takim wypadku metoda zostanie zamieniona? Nie wystąpi coś w rodzaju przeciążenia metody i sam w końcu nie będę wiedział która się wywoła?
Go to the top of the page
+Quote Post
marcio
post
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie poprostu tym sposobem mozesz rozszerzac funkcjonalnosc danej metody lub dodawac nowe.

A po co ty masz wiedziec ktora sie wywola to ma wiedziec twoj skrypt poprostu jesli ktos chce dodatkowa funkcjonalnosc instaluje sobie ten addons a twoj kod wykonuje odpowiedni kontroler i tyle
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: 24.08.2025 - 07:39