IZRADA SAJTA za 10 €

Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa


KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA
Igrice
Slike

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