Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] abstrakcja
Forum PHP.pl > Forum > Przedszkole
plisek
witam,
mam problem z abstrakcja klas i funkcji ;/
powiedzmy ze mamy taki przykład:
  1. <?php
  2.    interface Validator {
  3.       abstract function validacja();
  4.    }
  5. ?>

do tego mamy klasę , ktora implementuje interfejs:
  1. <?php
  2.    require_once('interface.Validator.php');
  3.  
  4.    abstract class PrzykladowyOb implements Validator {
  5.       // jakies atrybuty klasy
  6.       // jakies metody klasy
  7.  
  8.      function validacja(){
  9.         // ciało funkcji
  10.      }
  11. ?>


i teraz jeżeli chcę zrobić klase dzidziczącą po klasie PrzykładowyOb:
  1. <?php
  2. require_once('class.PrzykladowyOb.php');
  3.  
  4.    class Encja extends PrzykladowyOb {
  5.         // atrybuty i metody
  6.       function validuj(){
  7.        // ciało funkcji
  8.       }
  9.    }
  10. ?>


kiedy chche stworzyć jakis obiekt klasy Encja to wyskakuje mi błąd, odnoszący sie do predydatu funkcji w interfejcie. Jeżeli zamiast abstrakcyjnych zrobie z nich normalne, wszytsko jest ok.

w czym tkwi problem??
wiem ze klasa abstrkcyjna, to klasa, ktora nie ma potomkow ( u mnie tak jest). Zatem gdzie jest problem?

z gory dzieki za informacje winksmiley.jpg
pozdr


ps
sory za haotycznośc, ale jest pozno i nie mam weny tworczej, a problem mnie martwi ;/ sadsmiley02.gif
LBO
1. Wydaje mi się, że musisz poczytać manual.
2. W twoim przypadku zupełnie bez sensu mieszasz interface z abstract'em. Abstract to nic innego jak połączenie interface ze zwykłą klasą (pod kątem dziedziczenia). Metody oznaczone jako abstrakcyjne muszą byc zaimplementowane w klasie dziedziczacej - klasa abstrakcyjna tylko je deklaruje, nie pokazując sposobu implementacji tych metod w klasie potomnej. Reszta funkcji (standardowe oznaczenia PPP) z tej klasy abstrakcyjnej jest juz w tej deklaracji implementowana, a dziedziczenie odbywa sie w zwykły sposób - jak ze zwykłej klasy.
Cytat
  1. <?php
  2.  interface Validator {
  3. abstract function validacja();
  4.  }
  5. ?>

3. Interface nie może zawierać metod abstrakcyjnych.
Cytat
  1. <?php
  2.  require_once('interface.Validator.php');
  3.  
  4.  abstract class PrzykladowyOb implements Validator {
  5. // jakies atrybuty klasy
  6. // jakies metody klasy
  7.  
  8.  function validacja(){
  9. // ciało funkcji
  10.  }
  11. ?>

4. Klasa abstrakcyjna musi zawierac conajmniej jedną metodę abstrakcyjną i Vice Versa.
plisek
Przykład z abstrakcyjna funkcją w Interfejsie pochodzi z ksiązki helionu "Zaawansowane programowanie".
wiec chyba nie do końca jest to takie bezsensowne (mam nadzieje)
problem tkwi w tym ze ja tego wogole nie roziumiem po co sie tak robi?? i pytanie grugie czemu to nie chodzi questionmark.gif

czy to wogole zatem ma sens??

pozdr
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.