Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa
KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA

Nasledjivanje

Rezervisana reč extends govori da će klasa biti potklasa druge klase. Klasa po imenu B, koja nasledjuje klasu A, pravi se na sledeći način:

class B extends A{
  var $atribut2;
  function operacija2(){
  }
}

Ako se klasa A definiše na sledeći način:

class A{
  var $atribut1;
  function operacija1(){
  }
}

Sledeći iskazi za pristup operacijama i atributima objekta tipa B su ispravni:

$b = new B();
$b -> operacija1();
$b -> $atribut1 = 10;
$b -> operacija2();
$b -> $atribut2 = 10;

Obzirom da klasa B proširuje (nasledjuje) klasu A, možete upotrebiti funkciju operacija1 i atribut $atribut1 iako su oni deklarisani u klasi A. Kao potklasa klase A klasa B nasledjuje funkcionalnost i podatke. Osim toga, klasa B je deklarisala i sopstveni atribut i operaciju.

Treba imati u vidu da nasledjivanje funkcioniše samo u jednom smeru. Potklasa može naslediti karakteristike od svakog pretka, odnosno nadklase, dok predak ne nasledjuje karakteristike potomka. To znači da poslednja dva reda sledećeg koda nisu ispravni:

$a = new A ();
$a -> operacija1();
$a -> $atribut1 = 10;
$a -> operacija2();
$a -> $atribut2 = 10;

Klasa A nema funkciju operacija2, ni atribut $atribut2.

Prikazali smo potklasu koja deklariše nove atribute i operacije. Ispravno je, i po nekad korisno deklarisati iste atribute i operacije kao u nadklasi. To se može uraditi da bi se nekom atributu u potklasi dala drugačija vrednost u odnosu na isti atribut u natklasi ili da bi se operaciji u potklasi promenila funkcionalnost u odnosu na istu operaciju u natklasi. Promena funkcionalnosti u potklasi je redefinisanje. Ako je na primer klasa A sledeće:

class A {
  var $atribut="vrednost";
  function operacija(){
    echo "nesto <br>";
    echo "vrednost \$atribut je $this -> $atribut<br>";
  }
}

I želite da promenite podrazumevanu vrednost atributa $atribut i promenite funkcionalnost operacije operacija tada klasu B, koja definiše taj atribut i tu operaciju, možete da napravite na sledeći način:

class B extends A {
   var $atribut="drugacija vrednost";
   function operacija(){
      echo "nesto<br>";
      echo "vrednost \$atribut je $this -> $atribut<br>";
   }
}

Deklarisanje klase B ne utiče na prvobitnu definiciju klase A. Pogledajte naredna dva reda:

$a = new A ();
$a -> operacija();

Napravili ste objekat tipa A i pozvali njegovu funkciju operacija. To ispisuje:

Nesto
Vrednost $atribut je vrednost

Ovo dokazuje da time što ste napravili B niste izmenili A. Ako napravite objekat tipa B, dobićete drugačiji rezultat:

$b = new B();
$b -> operacija();

Daje:

Nesto drugo
Vrednost $atribut je drugacija vrednost

Isto kao što dodavanje atributa ili operacija u potklasi ne utiče na natklasu, tako i redefinisanje atributa i operacija u potklasi ne utiče na natklasu.

Potklasa će naslediti sve atribute i operacije natklase ako ih ne zamenite. Ako redefinišete atribute ili operacije one zamenjuju prvobitne definicije.

Za razliku od drugih jezika PHP ne dozvoljava da redefinišete funkciju, a da i dalje pozivate verziju definisanu u natklasi.

Nasledjivanje može da se nastavi u više slojeva. Možete definisati klasu C, koja proširuje klasu B, pa samim tim nasledjuje od nje i njenog pretka, klasu A. Pri tome klasa C može da redefiniše atribute i operacije natklase i doda nove.

Pojedini objektno orjentisani programski jezici podržavaju višestruko nasledjivanje, ali ne i PHP. To znači da klasa može da nasledjuje samo jednog pretka. Broj potomaka koji mogu da nasledjuju tog pretka nije ograničen.

Copyright © 2010 BUbaj. Powered By bubaj.com
PHP    PHP sintaksa    Fajl    Niz    String    Funkcija    Objektno programiranje    MySQL    Unos fajla    Datum    Forme    Sesija    Registracija