Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> klasy abstrakcyjne
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Tworząc interfejs używamy słowa abstract przy definicji metod.

Po co używa się tego słowa przy definicji klas (lub funkcji - w przypadku gdy nie jest to interfejs) ?
W jakim celu tworzyć abstrackyjne klasy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Apo
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


W przeciwieństwie do interfejsów w klasach abstrakcyjnych masz ciało metod, czyli częściowe zaimplementowanie interfejsu, możesz wymuszać obecność metod w klasach jak i iniemożliwić nadpisanie innej itp.

Fajnym przykładem może być obsługa akcji w frameworkach np:

  1. <?php
  2. abstract class SzablonAkcji {
  3.  
  4. protected $przywileje = array('public');
  5.  
  6. abstract public function akcjaAlternatywna(); // wymuszamy utworzenie tej metody w klasach dziedziczących
  7.  
  8. final function OdpalAkcje() // w klasach dziedziczących nie mozemy nadpisac tej metody
  9. {
  10. $action = new HttpRequest->get('action');
  11. $action = $this->$action . '()';
  12.  
  13. if(method_exists($action, $this))
  14. $this->action;
  15. else
  16. $this->akcjaAlternatywna();
  17. }
  18. }?>


Stworzony został prosty szkielet do obsługi akcji, czyli wywoływania odpowiednich metod na podstawie urla, aby wyświetlić przykładowo newsy musimy utworzyć klasa WyswietlNewsy która będzie dziedziczyć nasz SzablonAkcji.

  1. <?php
  2.  
  3. class WyswietlNewsy extends SzablonAkcji {
  4.  
  5. protected $przywileje('admin');
  6.  
  7. public function AkcjaAlternatywna()
  8. {
  9. echo 'Błąd obsługi akcji';
  10. }
  11.  
  12. public function WyswietlNewsy()
  13. {
  14. // wyswietlanie newsow
  15. }
  16.  
  17. }
  18. ?>


Pisałem z palca więc mogą byc błędy, ale myślę że teraz wiesz miej więcej jak to działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- J4r0d   klasy abstrakcyjne   9.08.2006, 19:44:56
- - Apo   W przeciwieństwie do interfejsów w klasach abstrak...   9.08.2006, 19:56:25
- - envp   Heh wytlumaczone dobrze, ale dziwnie. J4r0d: poj...   10.08.2006, 03:10:21
|- - J4r0d   Cytat(envp @ 10.08.2006, 02:10 ) Heh wytl...   11.08.2006, 21:03:44
|- - Apo   Cytat2. Co dokładnie daje dodanie słowa static po ...   12.08.2006, 09:39:59
|- - J4r0d   Cytat(Apo @ 12.08.2006, 08:39 ) Nie musis...   24.08.2006, 20:20:40
- - Ludvik   Klasy abstrakcyjne nie są wygodnym narzędziem do d...   10.08.2006, 10:01:30
- - J4r0d   Mniej więcej łapie. Wychodzi na to, że lepiej używ...   10.08.2006, 19:17:10
- - Ludvik   CytatWychodzi na to, że lepiej używać klas abstrak...   10.08.2006, 19:29:19
|- - J4r0d   Cytat(Ludvik @ 10.08.2006, 18:29 ) Pamięt...   10.08.2006, 22:40:38
- - Ludvik   A sprawdziłeś czy to działa? Na mój gust działa......   10.08.2006, 22:46:40
|- - J4r0d   Cytat(Ludvik @ 10.08.2006, 21:46 ) A spra...   10.08.2006, 23:11:05
- - Ludvik   Kilka tematów niżej jest przykładowa odpowiedź.   10.08.2006, 23:14:54
- - Cysiaczek   Sporo sensu to ma. np. interfejsy: 1. save(), loa...   10.08.2006, 23:17:10
- - Ludvik   W definicji interfejsów nie używamy słowa abstract...   11.08.2006, 21:06:21
- - Cysiaczek   A do pozostałych nie - o to właśnie chodzi.Własni...   24.08.2006, 20:35:47
|- - J4r0d   Cytat(Cysiaczek @ 24.08.2006, 19:35 ) Jeś...   24.08.2006, 20:52:00
- - dr_bonzo   Nie ma klas statycznych, moga byc tylko metody sta...   24.08.2006, 20:51:28
- - Cysiaczek   Faktycznie - trochę nieściśle si...   24.08.2006, 21:27:43
- - thornag   @J4r0d Wracajac jeszcze do pytania abstrakcyjne. P...   25.08.2006, 15:53:26
|- - J4r0d   Cytat(thornag @ 25.08.2006, 14:53 ) Jasny...   25.08.2006, 22:59:29
- - thornag   Wroce do przykladu z ksiazki. Masz jakis mechanizm...   26.08.2006, 10:24:39


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: 26.12.2025 - 02:29