35
Objektno orijentisano programiranje u jeziku PHP Univerzitet u Beogradu - Elektrotehnički fakultet Autori : D.Drašković, T.Šekularac, J.Cincović

Objektno orijentisano programiranje u jeziku PHP

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Objektno orijentisano programiranje u jeziku PHP

Objektno orijentisano programiranje u jeziku PHP

Univerzitet u Beogradu - Elektrotehnički fakultet

Autori:D.Drašković, T.Šekularac, J.Cincović

Page 2: Objektno orijentisano programiranje u jeziku PHP

Izrada klasa, objekata, atributaPolimorfizam, nasleđivanje, redefinisanjeModifikatori pristupaInterfejsiNamespace

Page 3: Objektno orijentisano programiranje u jeziku PHP

Klasa je osnovna jedinica programiranja na OO jezicimaKlase sadrže:

Atribute (svojstva ili promenljive koje opisuju objekat)Operacije (metode, radnje ili funkcije koje objekat može da izvršava)Mehanizme za stvaranje objekata na osnovu definicije(konstruktore)

Enkapsuliranje (skrivanje podataka)Pristup podacima unutar datog objekta moguć samo pomoću operacija tog objekta

Šta je objekat?Jedan primerak (instanca, pojava) klase

3

Page 4: Objektno orijentisano programiranje u jeziku PHP

OO jezici podržavaju polimorfizam: svaki objekat izvedene klase izvršava operaciju onako kako je to definisano u njegovoj (izvedenoj) klasiNasleđivanje: klasa + jedna ili više potklasaPotklasa (izvedena klasa, dete) nasleđuje atribute i operacije od svoje natklase (roditeljske klase)Nasleđivanje omogućava nadgradnju i proširenje postojećih klasa:

class Voziloclass Auto extends Voziloclass Kamion extends Vozilo

4

Page 5: Objektno orijentisano programiranje u jeziku PHP

class ime {var $atribut1;var $atribut2;function operacija1() {}function operacija2($par1, $par2) {}

}

Konstruktor se poziva prilikom pravljenja objekata date klaseKonstruktor se deklariše kao druge operacije, ali ima specijalno ime __construct()

class ime {function __construct($par="") {echo "pozvan je konstruktor sa parametrom $par"; }}

5

Page 6: Objektno orijentisano programiranje u jeziku PHP

Nov objekat se pravi pomoću rezervisane reči newPrimer:$a = new ime('Prvi');$b = new ime('Drugi');$c = new ime();Rezultat:pozvan je konstruktor s parametrom Prvipozvan je konstruktor s parametrom Drugipozvan je konstruktor s parametrom

6

Page 7: Objektno orijentisano programiranje u jeziku PHP

Magične metode su ugrađene metode koje počinju sa '__'. Vidljivost magičnih metoda uvek mora biti javlja.Pozivaju se automatski. Ukoliko ih ne definišemo, izvršavaće se podrazumevano ponašanje ovih metoda.Spisak magičnih metoda:

__construct() i __destruct()__toString()__call() i __callStatic()__get(), __set(), __isset() i __unset()__sleep() i __wakeup()__invoke()__set_state()__clone()__debugInfo()

7

Page 8: Objektno orijentisano programiranje u jeziku PHP

Pokazivač $this upućuje na tekući objekatAko tekući objekat ima atribut $atr, možete da mu pristupite pomoću imena $this->atrPrimer:class ime {

var $atr;function operacija($par) {

$this->atr = $par;echo $this->atr;

}}

8

Page 9: Objektno orijentisano programiranje u jeziku PHP

Primer:class ime {

private $atr;function __get($imeatributa) {

return $this->$imeatributa; }function __set($imeatributa, $nova_vred) {

$this->$imeatributa=$nova_vred; }}

Ove dve metode se pozivaju implicitno$a = new ime();$a->atr = 5; // poziva se funkcija __setecho $a->atr; // poziva se funkcija __get

9

Page 10: Objektno orijentisano programiranje u jeziku PHP

public (javni) - elementima koji se deklarišu kao javni može sepristupati i unutar i izvan klase; atributi su podrazumevano javniprivate (privatni) - elementima koji se deklarišu kao privatnimože se pristupati samo unutar klase i ne može im se pristupitiiz potklasa;protected (zaštićen) - označava da elementu klase može da sepristupi samo unutar klase, ali se tom elementu može pristupitiiz potklasa;class ime {

public $atribut;}

10

Page 11: Objektno orijentisano programiranje u jeziku PHP

Metode __set(), __get(), __isset(), __unset() se pozivajuimplicitno samo u svučaju privatnih, zaštićenih i nepostojećihatributa.

class A {public $javni;protected $zasticeni;private $privatni;var $podrazumevani;

}$a = new A();$a -> javni = 1; //uspesno se izvrsava$a -> zasticeni = 2; //greska: zasticen atribut$a -> privatni = 3; //greska: privatni atribut$a -> podrazumevani = 4; //uspesno se izvrsava$a -> nepoznat = 5; //dodat novi javni atribut11

Page 12: Objektno orijentisano programiranje u jeziku PHP

$a = new ime();

//pristup kao atributu tog objekta

$a->operacija1();$a->operacija2(11,'proba');

//ako operacija vraca neku vrednost

$x = $a->operacija1();$y = $a->operacija2(11,'proba');

12

Page 13: Objektno orijentisano programiranje u jeziku PHP

class A {public $jav1;protected $zas1;private $pri1;function op1() {}

}class B extends A {

public $jav2;protected $zas2;private $pri2;function op2() {}

}$b = new B();var_dump($b);$b->pri1 = 'novi'; // stvara novi atribut pri1

13

Ispis:

object(B)[1]

public 'jav2' => null

protected 'zas2' => nullprivate 'pri2' => null

public 'jav1' => null

protected 'zas1' => null

private 'pri1' (A) => null

Page 14: Objektno orijentisano programiranje u jeziku PHP

Promena postojeće funkcionalnosti natklase u nasleđenoj klasiclass A {

var $atribut = “staravrednost”;function operacija() {

echo 'nesto<br/>';echo “vrednost je $this->atribut”; }

}class B extends A {

var $atribut = “novavrednost”;function operacija() {

echo 'nesto drugo<br/>';echo “vrednost je $this->atribut”; }

}

14

Page 15: Objektno orijentisano programiranje u jeziku PHP

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

Izlaz:nestovrednost je staravrednost

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

Izlaz:nesto drugo //nestovrednost je novavrednost //vrednost je novavrednost

15

Page 16: Objektno orijentisano programiranje u jeziku PHP

Poziva se za izvršavanje operacije iz nadklase

class A {private $pri1;function op1() {$this->pri1 = 'a';}public function __construct($vr){ $this->pri1 = $vr; }

}class B extends A {

function op1() {parent::op1();}public function __construct($vr){ parent::__construct($vr);}

}

16

Page 17: Objektno orijentisano programiranje u jeziku PHP

Služi za sprečavanje nasleđivanjaKada se postavi ispred deklaracije funkcije, ta se funkcija ne može zameniti istoimenom ni u jednoj potklasi:final function operacija() { … }

Upotrebom final se može sprečiti i nasleđivanje određene klase:final class A() { … }

17

Page 18: Objektno orijentisano programiranje u jeziku PHP

C

BA

PHP ne podržava višestruko nasleđivanje.Interfejs deklariše određen broj funkcija koje moraju biti realizovane u svim klasama koje realizuje taj interfejs.interface Prikazuje {

function prikazi ();}class MyClass implements Prikaz {

function prikazi() {...}}

Interfejs se koristi kao “zaobilazni” način da se realizuje višestruko nasleđivanje

18

Page 19: Objektno orijentisano programiranje u jeziku PHP

Trait predstavlja skup funkcija. Nije ga mogućeinstancirati niti ili bilo koje drugo svojstvo klasa.

trait MyTrait {function show() {…};

}class MyClass extends MyBasicClass {

use MyTrait;}

Trait smanjuje redudantnost koda, jer se skup funkcijajednom implementira, a zatim se samo uveze u svepotrebne klase.

19

Page 20: Objektno orijentisano programiranje u jeziku PHP

const - konstanta klase, koja se koristi bez obaveze da se napravi objekat.class Matematika {

const pi = 3.14159;public const e = 2.71828;

}echo 'Pi je '.Matematika::pi;echo 'E je '.Matematika::e;

20

Page 21: Objektno orijentisano programiranje u jeziku PHP

Kada je zadata ispred deklaracije metode, omogućava da se poziva metoda bez pravljenja instance klase:static function kvadrat($broj) {

return $broj*$broj; }echo 'Kvadrat od 8 = '.Matematika::kvadrat(8);

Kada je zadata ispred deklaracije atributa, stvara se atribut bez pravljenja instance klase.

Self:: - statički referencira klasuStatic:: - dinamički referencira klasu

21

Page 22: Objektno orijentisano programiranje u jeziku PHP

<?php //Student.phpclass Student {

public $firstName;public $lastName;public function __construct($firstName, $lastName = '') { //Optional parameter

$this->firstName = $firstName;$this->lastName = $lastName;

}public function greet() {

return "Hello, my name is " . $this->firstName . " " . $this->lastName . ".";

}public static function staticGreet($firstName, $lastName) {

return "Hello, my name is " . $firstName . " " . $lastName . ".";

}}?>

Page 23: Objektno orijentisano programiranje u jeziku PHP

<?php //index.phprequire("Student.php");$demon1 = new Student('Stefan', 'Kostic');$demon2 = new Student('Mina', 'Reljic');$demon3 = new Student('Filip Zivkovic');

echo $demon1->greet();echo '<br />';echo $demon2->greet();echo '<br />';echo $demon3->greet();echo '<br />';echo Student::staticGreet('Balsa', 'Bojic');

?>

Page 24: Objektno orijentisano programiranje u jeziku PHP

Korišćenjem imenskog prostora (namespace) vrši se formiranje imenovanih oblasti tako da dve različiteimenovane oblasti mogu da sadrže funkcije ipromenljive istog naziva.

Page 25: Objektno orijentisano programiranje u jeziku PHP

Namespace se može definiše na dva načina:Na početku fajla i onda važi na nivou celog fajlanamespace myNamespace;Na bilo kom mestu unutar fajla, ali se onda kod koji pripada tom namespacu stavlja u vitičaste zagradenamespace myNamespace {

…}

Ukoliko se ne defineše namespace, koristi se globalni namespace.Subnamespace je namespace koji se nalazi unutarnekog drugog namespace-anamespace myNamespace/subnamespace;

Page 26: Objektno orijentisano programiranje u jeziku PHP

Elementima koji se nalaze u drugom namespace-u se može pristupiti navodjenjem naziva namespace-a ispred njenog naziva.myNamespace\func(); \\ poziv funkcije iz myNamespace\func(); \\ poziv funkcije iz globalnog namespace-a

Za pozive iz odredjenog namespace-u i pozivanjeelemenata koji se nalaze u njegovom subnamespace-u dovoljno je da se navede samo naziv subnamespace-a.

Page 27: Objektno orijentisano programiranje u jeziku PHP

Kako se ne bi stalno navodio i naziv namespace-a, može se definisati alias preko koga se može pristupatipomoću use komande.use myNamespace\myClass as newClassName;use myNamespace\myClass as myClass;use myNamespace\myClass; // ovo ima isto značenje

kao i prethodna istrukcija

use function myNamespace\functionName; use const myNamespace\CONSTANT;

Page 28: Objektno orijentisano programiranje u jeziku PHP

Funkcija spl_autoload_register za automatsko ucitavanje fajlova.

spl_autoload_register(function ($class) {

include 'classes/’. $class . '.class.php’;

});$obj = new myClass();

Ovim mehanizmom se omogućavava da se koriste klase iz drugih fajlova bez njihovog uvezivanja pomoću include ili require.

Page 29: Objektno orijentisano programiranje u jeziku PHP

Koncepti obrade izuzetakaKlasa ExceptionIzuzeci koje korisnik definiše

Page 30: Objektno orijentisano programiranje u jeziku PHP

Kod se izvršava unutar try bloka:try {

//kod}Unutar try bloka izuzetak se izaziva:throw new Exception('poruka', broj_greske);Svakom bloku try mora da sledi barem jedan blok catch:catch (Exception $e) {

//obrada izuzetka}Objekat koji se prosleđuje bloku catch (da bi ga blok presreo) jeste objekat prosleđen iskazu throw koji je generisao izuzetak.

30

Page 31: Objektno orijentisano programiranje u jeziku PHP

<?phptry {throw new Exception('Greska!!!', 42);

}catch (Exception $e){

echo 'Exception '.$e->getCode().': '.$e-> getMessage().'<br />'.' u fajlu '. $e->getFile(). 'na liniji '. $e->getLine(). '<br />';

}?>

31

Page 32: Objektno orijentisano programiranje u jeziku PHP

Konstruktor te klase prihvata 2 parametra: tekst poruke o grešci i broj greškegetCode() - vraća broj greške koji je bio prosleđen konstruktorugetMessage() - vraća tekst poruke koja je bila prosleđena konstruktorugetFile() - pozivajućem kodu vraća punu putanju datoteke u kojoj je generisan

izuzetakgetLine() - vraća broj reda koda u kome je generisan izuzetakgetTrace() - vraća niz s podacima o stablu pozivanja koji omogućavaju

utvrđivanje mesta na kome je generisan izuzetakgetTraceAsString () - vraća iste podatke kao getTrace(), formatirane kao

znakovni podaci__toString() - omogućava da se iskazu echo direktno prosledi ceo sadržaj

objekta Exception, sa svim podacima koje daju navedene metode

32

Page 33: Objektno orijentisano programiranje u jeziku PHP

Služi za konekciju između PHP i MySQL, pomoću OOPrimer:

$conn = new mysqli(“localhost", “root", "", “akcije");if ($ conn->connect_errno){printf("Connect failed: %s\n", $conn->connect_error);exit();

}$query = "SELECT * FROM Korisnik";if ($result = $conn->query($query)) {

while($obj = $result->fetch_object()){//…

}$result->close();

}$conn->close();

Page 34: Objektno orijentisano programiranje u jeziku PHP

Služi za konekciju između PHP i baze, pomoću OOSinopsis:

PDO {public __construct ( string $dsn [, string $username [, string $passwd

[, array $options ]]] )public beginTransaction ( void ) : boolpublic commit ( void ) : boolpublic errorCode ( void ) : stringpublic errorInfo ( void ) : arraypublic exec ( string $statement ) : intpublic getAttribute ( int $attribute ) : mixedpublic static getAvailableDrivers ( void ) : arraypublic inTransaction ( void ) : boolpublic lastInsertId ([ string $name = NULL ] ) : stringpublic prepare ( string $statement [, array $driver_options = array() ] ) : PDOStatementpublic query ( string $statement ) : PDOStatementpublic quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] ) : stringpublic rollBack ( void ) : boolpublic setAttribute ( int $attribute , mixed $value ) : bool

}

Page 35: Objektno orijentisano programiranje u jeziku PHP

Hvala!