Polimorfizm w PHP na cztery sposoby

Ucząc się na testy programowania oop w PHP natrafiłem na ciekawy temat jakim jest polimorfizm. Z racji tego, że mało było tematów na ten temat w języku Polskim postanowiłem troszkę ułatwić naukę przyszłym programistom szukającym jakiś materiałów na temat polimorfizmu i nawet podzielić go na kategorie. Nie spotkałem się z takim podziałem, więc mam nadzieję, że dobrze zrobiłem dzieląc go na cztery kategorie. Uważam takie stworzenie kategorii za łatwiej zrozumiałe i przejrzyste do dalszej nauki.

1. Polimorfizm Interfejsowy

2. Polimorfizm Abstrakcyjny

3. Polimorfizm Traits

4. Polimorfizm Dziedziczony

Jeżeli uważacie inaczej, dajcie znać, a wezmę wasze uwagi pod uwagę.

Pierwszym przedstawionym prze zemnie polimorfizmem w PHP, jest tradycyjny opierający się na interfejsie polimorfizm interfejsowy. Implementujemy interfejs z naszymi metodami do każdej klasy gdzie mają być wykorzystane. Dokładnie widać to na przykładzie poniżej.

Przykład 1 Polimorfizm Interfejsowy:

tytul;
      }
    
   public function setTytul($tytul){   
      $this->tytul = $tytul;
      }
    
  public function getAutor(){   
    return  $this->autor;
      }
    
   public function setAutor($autor){   
      $this->autor = $autor;
      }
}

class Komiks implements Ksiegarnia{
   
   public function getTytul(){ 
    return  $this->tytul;
      }
    
   public function setTytul($tytul){ 
      $this->tytul = $tytul;
      }
    
  public function getAutor(){   
    return  $this->autor;
      }
              public function setAutor($autor){   
      $this->autor  =  $autor;
      }

$tytulBook = "Manager Wydobycia";
 $cenaBook = "100 zł";
 $autorBook = "Adam Berger";

####### Book ########
 
 $book1 = new Book();

 $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
  $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";

  $book1->setCena($cenaBook);
   // Cena 
 echo $book1->getCena()."
";

####### Komiks ########
$tytulKomiks = "Komiks Manager Wydobycia";
 $autorKomiks = "Adam Berger Komiks";
 $cenaKomiks = "10 zł";
  $komiks1 = new Komiks();
 $komiks1->setTytul($tytulKomiks);
 // Tytul
 echo $komiks1->getTytul()."
";
 
  $komiks1->setAutor($autorKomiks);
 // Autor
 echo $komiks1->getAutor()."
";
  $komiks1->setCena($cenaKomiks);
   // Cena 
 echo $komiks1->getCena()."
";
?>

Drugi przykład polimorfizmu przedstawia polimorfizm abstrakcyjny, dziedziczenie po klasie abstrakcyjnej i praktycznie niczym się nie różni od pierwszego przykładu z tym, że do klasy abstrakcyjnej możemy dodać jeszcze kolejne cechy potrzebne w dalszej pracy z programem. Możemy na przykład wykorzystać opisany polimorfizm klasy abstrakcyjnej w czwartym przykładzie, dodając go do klasy abstrakcyjnej.

Przykład 2 Polimorfizm Abstrakcyjny:

tytul;
   }
   
   public abstract function setAutor($autor);
   public function getAutor(){
   
   return  $this->autor;
   }
   
   public abstract function setCena($cena);
   public function getCena(){
   
   return  $this->cena;
   }
 }
 
 class Book extends Ksiegarnia{
 
    public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
    
  public function setAutor($autor){
       
      $this->autor = $autor;
      }
    public function setCena($cena){
     
     $this->cena = $cena;
      }  
 }
 
 class Komiks extends Ksiegarnia{
 
    public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
    
  public function setAutor($autor){
       
      $this->autor = $autor;
      }
    public function setCena($cena){
     
     $this->cena = $cena;
      }  
 }


 ####### Book ########
 
 $tytulBook = "Book Manager Wydobycia";
 $autorBook = "Adam Ber Book";
 $cenaBook  = "10 zł";
 
   $book1 = new Book();
  
   $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
   $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";
 
  $book1->setCena($cenaBook);
   // Cena 
 echo $book1->getCena()."

";
 
  ####### Komiks ########
 
 $tytulKomiks = "Komiks Manager Wydobycia";
 $autorKomiks = "Adam Ber Komiks";
 $cenaKomiks  = "5 zł";
 
   $komiks1 = new Komiks();
  
   $komiks1->setTytul($tytulKomiks);
 // Tytul
 echo $komiks1->getTytul()."
";
 
  $komiks1->setAutor($autorKomiks);
 // Autor
 echo $komiks1->getAutor()."
";
 
  $komiks1->setCena($cenaKomiks);
   // Cena 
 echo $komiks1->getCena()."

";
?>

Kolejnym przykładem poliformizmu w PHP, jest przykład polegający na wykorzystaniu polimorfizm traits. Zauważmy , jak podczas tak wykonanemu programowi zmniejsza się ilość kodu potrzebnego do przedstawienie praktycznie tego samego co w poprzednim przykładzie.

Przykład 3 Polimorfizm Traits:

tytul;  
      }
    
   public function setTytul($tytul){
       
      $this->tytul = $tytul;    
      }
  // Autor  
  public function getAutor(){
       
    return  $this->autor;
      }
    
   public function setAutor($autor){
       
      $this->autor = $autor;
      }
    // Kategoria 
    public function getKategoria(){
       
    return  $this->kategoria;
      }
    
   public function setKategoria($kategoria){
       
      $this->kategoria = $kategoria;
      }
    
  // Cena  
  public function getCena(){
     
     return  $this->cena;
   }
    public function setCena($cena){
     
     $this->cena = $cena;
   }
   // Gdzie znajduje się w Księgarni
   public function getPolka(){
    
    return $this->polka;
     } 
  
  public function setPolka($polka){
    
     $this->polka = $polka;  
  } 
 }
 
 trait Ksiegarnia_nr_Isbn {
 
   public $isbn;
   
    public function getISBN(){
       
    return  $this->isbn;
   }
   
  public function setISBN($isbn){
        $this->isbn = $isbn;
    } 
 }
 
 trait Ksiegarnia_Wiek_Gracza{
 
  public $wiekGraczy;
   
  public function getWiekGraczy(){
       
    return  $this->wiekGraczy;
   }
   
  public function setWiekGraczy($wiek){
        $this->wiekGraczy = $wiek;
    }
 }
 
  class Book{
    use Ksiegarnia, Ksiegarnia_nr_Isbn; 
  
  }
  
  class Komiks{
     use Ksiegarnia, Ksiegarnia_nr_Isbn;
   
   public $figurka;
    
   public function getKomiksZFigurka(){
       
    return  $this->figurka;
    
   }
   
  public function setKomiksZFigurka($figurka){
        $this->figurka = $figurka;
    }
   }
  
  class GryPC{
    use Ksiegarnia, Ksiegarnia_Wiek_Gracza;
  
  }
  
  class GryLinux{
    use Ksiegarnia, Ksiegarnia_Wiek_Gracza; 
  
  
  }

####### Book ########
 $tytulBook = "Book Manager Wydobycia";
 $autorBook = "Adam Ber Book";
 $cenaBook = "10 zł";
 $isbnBook = "ISBN: 34523211345546456456456";
 $kategoriaBook = "Informatyka";
 $polkaBook = "Półka nr 14 ";
  $book1 = new Book();
  
 $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
  $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";
 
  $book1->setCena($cenaBook);
   // Cena 
 echo $book1->getCena()."
";
 
    $book1->setISBN($isbnBook);
     // nr ISBN
 echo $book1->getISBN()."
";
$book1->setKategoria($kategoriaBook);
 // kategoria
 echo $book1->getKategoria()."
";
 $book1->setPolka($polkaBook);
 // która półka
 echo $book1->getPolka()."
";
 ####### Komiks ########
 
 $tytulKomiks = "Komiks Manager Wydobycia";
 $autorKomiks = "Adam Ber Komiks";
 $cenaKomiks = "5 zł";
 $isbnKomiks = "ISBN: 99995345546456456456";
 $kategoriaKomiks = "Kajko i Ko";
 $polkaKomiks = "Półka nr 15 ";
 $figurka     = "Prezent do komiksu";
 
  $komiks1 = new Komiks();
  
 $komiks1->setTytul($tytulKomiks);
 // Tytul
 echo $komiks1->getTytul()."
";
 
  $komiks1->setAutor($autorKomiks);
 // Autor
 echo $komiks1->getAutor()."
";
 
  $komiks1->setCena($cenaKomiks);
   // Cena 
 echo $komiks1->getCena()."
";
 
    $komiks1->setISBN($isbnKomiks);
     // nr ISBN
 echo $komiks1->getISBN()."
";
 $komiks1->setKategoria($kategoriaKomiks);
 // kategoria
 echo $komiks1->getKategoria()."
";
 $komiks1->setKomiksZFigurka($figurka);
     // Prezent do komiksu 
 echo $komiks1->getKomiksZFigurka()."
";;
  
 $komiks1->setPolka($polkaKomiks);
 // która półka
 echo $komiks1->getPolka()."
";
##### Gry PC ########
 $tytulPC = "Gra PC Manager Wydobycia";
 $autorPC = "Adam Ber Gra PC";
 $cenaPC = "1 zł";
 $wiekGraczyPC = "Od 14 Lat";
 
 
$gryPc = new GryPC();
$gryPc->setTytul($tytulPC);
 // Tytul
 echo $gryPc->getTytul()."
";
 
 $gryPc->setAutor($autorPC);
 // Autor
 echo $gryPc->getAutor()."
";
 
 $gryPc->setCena($cenaPC);
   // Cena 
 echo $gryPc->getCena()."
";
$gryPc->setWiekGraczy($wiekGraczyPC);
   // Wiek Graczy 
 echo $gryPc->getWiekGraczy()."
";
?>

Kolejny przykład czwarty z kolei polega na dziedziczeniu klasy i przesłanianie metody odziedziczonej. Jest to polimorfizm dziedziczony i przesłaniany w klasie docelowej. Także zmniejszamy tym samym ilość kodu potrzebnego do uruchomienia programu przedstawionym w pierwszym przykładzie. Część metod pozostaje w pierwszej klasie, które podczas użycia są przesłaniane danymi z klasy docelowej.

Przykład 4 Polimorfizm Dziedziczony:

tytul;
      }
    
   public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
  // Autor  
  public function getAutor(){
       
    return  $this->autor;
      }
    
   public function setAutor($autor){
       
      $this->autor = $autor;
      }
 }
 
 class Book extends Ksiegarnia{
 
    public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
    
  public function setAutor($autor){
       
      $this->autor = $autor;
      }
 }

 ####### Book ########
 
 $tytulBook = "Book Manager Wydobycia";
 $autorBook = "Adam Ber Book";
 
   $book1 = new Book();
  
 $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
  $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";
?>

Oczywiście każda klasa powinna mieć swoje indywidualne cechy, tylko dla niej samej ponieważ inaczej nie było by sensu robić osobnych klas jak book, czy komiks. Można wtedy zrobić jedną klasę i dane tam zawarte zwracać dla book i komiks bez wykonywania osobnych klas. Dzieje się tak dla tego , że w klasie nic się nie zmienia oprócz samej nazwy klasy. Metody i zmienne pozostają takie same no chyba, że zależy nam na takich właśnie nazwach klas i ich wywoływania w takiej postaci.

Polimorfizm w PHP na cztery sposoby-GITHUB

Używamy cookies i podobnych technologii m.in. w celach: świadczenia usług, reklamy, statystyk. Korzystanie z witryny bez zmiany ustawień Twojej przeglądarki oznacza, że będą one umieszczane w Twoim urządzeniu końcowym. Pamiętaj, że zawsze możesz zmienić te ustawienia. To find out more about the cookies we use and how to delete them, see our privacy policy.

I accept cookies from this site.

EU Cookie Directive Module Information