Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Interferfejs, wielodziedziczenie
naitsabes
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 5
Dołączył: 10.09.2010

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


Czesc, jakis czas temu przeczytałem, że jedyna opcja dla wielodziedziczenia jest Implementowanie interfejsu...


Poczytałem, ok stworzyłem niby interfejs, ale nie mam pojecia jak to wszystko działa.

Wydaje mi sie ze to działa w ten sposob

interfejs
{
funkcja()
}

clasa dajaca do interfejsu
{
funkcja()
{}
}


i pozniej mozna pobrac z interfejsu ta funkcje. Wydawało mi sie, że dobrze zrozumiałem to ale niestety nie moge stworzyc zadnego kodu, byc moze zle pojąłem sposob działania interfejsu.


Bylbym wdzieczny gdyby ktos zrobil jakis prosty przyklad, samo echo i zmienne, jak zrobic oraz wykorzystac interfejs.
Duzy czytalem, napisanie tutaj to ostatecznosc.


Dziekuje za cierpliwosc i przepraszam za prostote pytania


Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Speedy
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Implementowanie interfejsu i wielodziedziczenie, to dwie osobne sprawy. W PHP możesz implementować interfejsy, ale nie możesz korzystać z wielodziedziczenia. Jeśli chcesz mieć dostęp do funkcjonalności kilku klas w innej klasie możesz stworzyć obiekty tych klas w nowej klasie.
Np. Mamy 3 klasy: klasa1, klasa2 oraz klasa3 i chcemy użyć funkcjonalności z klas: klasa1 i klasa2 w klasie: klasa3. Możemy zrobić tak:

  1. <?php
  2. class klasa1 {
  3. public function funkcja1() {
  4. echo "funkcja1\n<br/>";
  5. }
  6. }
  7.  
  8. class klasa2 {
  9. public function funkcja2() {
  10. echo "funkcja2\n<br/>";
  11. }
  12. }
  13.  
  14. class klasa3 {
  15.  
  16. public $klasa1;
  17. public $klasa2;
  18.  
  19. public function __construct() {
  20. $this->klasa1 = new klasa1;
  21. $this->klasa2 = new klasa2;
  22. }
  23.  
  24. public fuction funkcja3() {
  25. $this->klasa1->funkcja1();
  26. $this->klasa2->funkcja2();
  27. }
  28.  
  29. }
  30.  
  31. $obiekt = new klasa3();
  32. $obiekt->funkcja3();
  33. ?>


Zamiast wielodziedziczenia, którego w PHP nie ma i które jest trochę sprzeczne z logiką programowania (choć w C++ jest) lub zamiast powyższego rozwiązania, możesz też użyć hierarchicznego uporządkowania klas np.

  1. <?php
  2. class klasa1 {
  3. public function funkcja1() {
  4. echo "funkcja1\n<br/>";
  5. }
  6. }
  7.  
  8. class klasa2 extends klasa1 {
  9. public function funkcja2() {
  10. echo "funkcja2\n<br/>";
  11. }
  12. }
  13.  
  14. class klasa3 extends klasa2 {
  15.  
  16. public function __construct() {
  17. }
  18.  
  19. public fuction funkcja3() {
  20. $this->funkcja1();
  21. $this->funkcja2();
  22. }
  23.  
  24. }
  25.  
  26. $obiekt = new klasa3();
  27. $obiekt->funkcja3();
  28. ?>


Przy tym rozwiązaniu trzeba pamiętać o tym, żeby klasy były logicznie uporządkowane. Nie zawsze jest sens stosować tego typu rozwiązanie.
Go to the top of the page
+Quote Post

Posty w temacie
- naitsabes   Interferfejs, wielodziedziczenie   22.05.2011, 20:16:23
- - destroyerr   Czy tutaj masz zbyt mało przykładów?   22.05.2011, 22:37:46
- - Hoku   [PHP] pobierz, plaintext interface A { functi...   22.05.2011, 22:44:48
- - el.pablo.72   Sensowne i proste rozwiązanie oferuje Framework Co...   25.05.2011, 14:59:45
- - destroyerr   @el.pablo.72 nie wprowadzaj zamieszania. Framework...   25.05.2011, 20:04:41
- - sarxos   Ale framework to chociaż porządkuje. W PHP brak je...   15.06.2011, 14:14:05
|- - Fifi209   Cytat(sarxos @ 15.06.2011, 15:14:05 )...   15.06.2011, 17:37:19
- - drPayton   A co ma piernik do wiatraka? Autor nie chce gotowc...   15.06.2011, 14:19:05
- - Speedy   Implementowanie interfejsu i wielodziedziczenie, t...   15.06.2011, 16:24:17
- - darko   ~Speedy nie do końca to takie dwie różne sprawy. I...   15.06.2011, 16:38:04
|- - Speedy   Cytat(darko @ 15.06.2011, 17:38:04 ) ...   15.06.2011, 23:34:14
- - cepa   wielodziedziczenie mozna zrobic wykorzystujac popr...   16.06.2011, 14:27:49
- - Crozin   @cepa: Bardzo ładny przykład jednego z najgorszych...   16.06.2011, 15:07:49
|- - cepa   Cytat(Crozin @ 16.06.2011, 16:07:49 )...   16.06.2011, 15:44:01
|- - Fifi209   Cytat(cepa @ 16.06.2011, 16:44:01 ) @...   16.06.2011, 15:50:14
|- - cepa   Cytat(Fifi209 @ 16.06.2011, 16:50:14 ...   16.06.2011, 15:57:31
- - Crozin   Cytat@Crozin: Dales bardzo ladny przyklad swojej n...   16.06.2011, 18:08:57
|- - cepa   Cytat(Crozin @ 16.06.2011, 19:08:57 )...   16.06.2011, 18:52:23
- - LSM   @Crozin : Czy nie uważasz że nadużycia wielodziedz...   17.06.2011, 01:13:29


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: 11.10.2025 - 19:59