Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> klasy (kolejny raz), dziedziczenie czy inaczej
Thaal
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 1.06.2003

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


Witam!!

Pisze sobie własnie taki mały system do obsługi artykułów. Do systemu maja dostęp dwie kategorie użytkowników: user i admin.
Do obsługi artykułów jest stworzona klasa 'articles', w ktorej mam takie metody jak:
- wyświetl liste
- wyswietl artykul
- dodaj artykuł
- zablokuj artykuł
I teraz pytanie:
Czy dziedziczenie (klsay 'admin' i 'user' dziedziczą z klasy 'articles') jest dobrym rozwiązaniem?? Bo w takim przypadku obiekt 'user' ma dostęp do metod, które nie są mu przeznaczone (i w rzeczywistości niewiele się różni od obiektu klasy 'admin', a w takim przypadku nie ma sensu tworzyc osobnej klasy 'user'). I żeby to obejść nalezy jeszcze raz zdefiniować metody 'dodaj artykuł' i 'zablokuj artykuł' w klasie user.
Drugie co mi do głowy przyszło to przekazanie utworzonego obiektu 'articles' do obiektów klas 'user' i 'admin'', a tam będą metody odpowiedzialne za wyświetlanie/edycje artykulów w zalezności od potrzeb (beda wywoływały metody obiektu 'articles').

Czy ktoś lepiej znający ode mnie temat mógłby jakos ustosunkować się do powyższego?? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

W drugim rozwiązaniu mozna jeszcze wyprowadzic klasę 'admin' z klasy 'user' - ale nad tym się jeszcze zastanowię (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)


P.S. jakby były problemy ze zrozumieniem tego co napisałem to przepraszam (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
byther
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 15.06.2004
Skąd: Warszawa

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


Tutaj całkiem nieźle może zadziałać coś takiego:
  1. <?php
  2. // Operujemy na elementach, których cechy reprezentują metody.
  3. class element
  4. {
  5. function wyswietl()
  6. {
  7. // nadpisywane przy dziedziczeniu
  8. }
  9. function dodaj()
  10. {
  11. // nadpisywane przy dziedziczeniu
  12. }
  13. function zablokuj()
  14. {
  15. // nadpisywane przy dziedziczeniu
  16. }
  17. }
  18.  
  19. // Użytkownik może wyświetlić, dodać lub zablokować element.
  20. class rola
  21. {
  22. function wyswietl( &$element )
  23. {
  24. $element->wyswietl();
  25. }
  26. function dodaj( &$element )
  27. {
  28. $element->dodaj();
  29. }
  30. function zablokuj( &$element )
  31. {
  32. $element->zablokuj();
  33. }
  34. }
  35.  
  36. // Użytkownik (rola \"User\") nie może zablokować posta.
  37. class user extends rola
  38. {
  39. function zablokuj()
  40. {
  41. die( &#092;"Nie masz uprawnień!\" );
  42. }
  43. }
  44.  
  45. // Użytkownik (rola \"Admin\") może zablokować.
  46. // Przykład minimum kodu do stworzenia nowej roli.
  47. class admin extends rola
  48. {
  49. }
  50.  
  51. // Artykuł to element...
  52. class artykul extends element
  53. {
  54. function wyswietl()
  55. {
  56. // tutaj zaimplementuj metodę wyswietl()
  57. }
  58. function dodaj()
  59. {
  60. // tutaj zaimplementuj metodę dodaj()
  61. }
  62. function zablokuj()
  63. {
  64. // tutaj zaimplementuj metodę zablokuj()
  65. }
  66. }
  67.  
  68. // Lista artykułów również jest elementem.
  69. class listaArtykulow extends element
  70. {
  71. function wyswietl()
  72. {
  73. // wyświetlenie listy artykułów
  74. }
  75. function zablokuj()
  76. {
  77. // zaimplementuj blokowanie listy artykułów
  78. }
  79. function dodaj()
  80. {
  81. // dodanie wielu artykułów?
  82. }
  83. }
  84.  
  85. ?>


Full OOP. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Rozwiązanie nie jest efektywne, bo stworzenie nowej roli użytkownika wymaga stworzenia klasy dziedziczącej po klasie osoba. Wprawka w OO-php? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 20:23