Click here to load reader

Objektno orijentisano programiranje u jeziku PHP

  • View
    0

  • Download
    0

Embed Size (px)

Text of Objektno orijentisano programiranje u jeziku PHP

Univerzitet u Beogradu - Elektrotehniki fakultet
Autori: D.Draškovi, T.Šekularac, J.Cincovi
Klasa je osnovna jedinica programiranja na OO jezicima Klase sadre:
Atribute (svojstva ili promenljive koje opisuju objekat) Operacije (metode, radnje ili funkcije koje objekat moe da izvršava) Mehanizme za stvaranje objekata na osnovu definicije (konstruktore)
Enkapsuliranje (skrivanje podataka) Pristup podacima unutar datog objekta mogu samo pomou operacija tog objekta
Šta je objekat? Jedan primerak (instanca, pojava) klase
3
OO jezici podravaju polimorfizam: svaki objekat izvedene klase izvršava operaciju onako kako je to definisano u njegovoj (izvedenoj) klasi Nasleivanje: klasa + jedna ili više potklasa Potklasa (izvedena klasa, dete) nasleuje atribute i operacije od svoje natklase (roditeljske klase) Nasleivanje omoguava nadgradnju i proširenje postojeih klasa:
class Vozilo class Auto extends Vozilo class Kamion extends Vozilo
4
}
Konstruktor se poziva prilikom pravljenja objekata date klase Konstruktor se deklariše kao druge operacije, ali ima specijalno ime __construct()
class ime { function __construct($par="") { echo "pozvan je konstruktor sa parametrom $par"; }}
5
Nov objekat se pravi pomou rezervisane rei new Primer: $a = new ime('Prvi'); $b = new ime('Drugi'); $c = new ime(); Rezultat: pozvan je konstruktor s parametrom Prvi pozvan je konstruktor s parametrom Drugi pozvan je konstruktor s parametrom
6
Magine metode su ugraene metode koje poinju sa '__'. Vidljivost maginih metoda uvek mora biti javlja. Pozivaju se automatski. Ukoliko ih ne definišemo, izvršavae se podrazumevano ponašanje ovih metoda. Spisak maginih metoda:
__construct() i __destruct() __toString() __call() i __callStatic() __get(), __set(), __isset() i __unset() __sleep() i __wakeup() __invoke() __set_state() __clone() __debugInfo()
7
Pokaziva $this upuuje na tekui objekat Ako tekui objekat ima atribut $atr, moete da mu pristupite pomou imena $this->atr Primer: class ime {
var $atr; function operacija($par) {
} }
$this->$imeatributa=$nova_vred; } }
Ove dve metode se pozivaju implicitno $a = new ime(); $a->atr = 5; // poziva se funkcija __set echo $a->atr; // poziva se funkcija __get
9
public (javni) - elementima koji se deklarišu kao javni moe se pristupati i unutar i izvan klase; atributi su podrazumevano javni private (privatni) - elementima koji se deklarišu kao privatni moe se pristupati samo unutar klase i ne moe im se pristupiti iz potklasa; protected (zaštien) - oznaava da elementu klase moe da se pristupi samo unutar klase, ali se tom elementu moe pristupiti iz potklasa; class ime {
public $atribut; }
Metode __set(), __get(), __isset(), __unset() se pozivaju implicitno samo u svuaju privatnih, zaštienih i nepostojeih atributa.
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
$a = new ime();
$a->operacija1(); $a->operacija2(11,'proba');
$x = $a->operacija1(); $y = $a->operacija2(11,'proba');
12
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:
public 'jav1' => null
protected 'zas1' => null
var $atribut = “staravrednost”; function operacija() {
echo 'nesto<br/>'; echo “vrednost je $this->atribut”; }
} class B extends A {
echo 'nesto drugo<br/>'; echo “vrednost je $this->atribut”; }
}
Izlaz: nesto drugo //nesto vrednost je novavrednost //vrednost je novavrednost
15
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 {
}
16
Slui za spreavanje nasleivanja Kada se postavi ispred deklaracije funkcije, ta se funkcija ne moe zameniti istoimenom ni u jednoj potklasi: final function operacija() { … }
Upotrebom final se moe spreiti i nasleivanje odreene klase: final class A() { … }
17
C
BA
PHP ne podrava višestruko nasleivanje. Interfejs deklariše odreen 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” nain da se realizuje višestruko nasleivanje
18
Trait predstavlja skup funkcija. Nije ga mogue instancirati niti ili bilo koje drugo svojstvo klasa.
trait MyTrait { function show() {…};
} class MyClass extends MyBasicClass {
use MyTrait; }
Trait smanjuje redudantnost koda, jer se skup funkcija jednom implementira, a zatim se samo uveze u sve potrebne klase.
19
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
Kada je zadata ispred deklaracije metode, omoguava 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:: - statiki referencira klasu Static:: - dinamiki referencira klasu
21
$this->firstName = $firstName; $this->lastName = $lastName;
} public function greet() {
} public static function staticGreet($firstName, $lastName) {
return "Hello, my name is " . $firstName . " " . $lastName . ".";
} } ?>
<?php //index.php require("Student.php"); $demon1 = new Student('Stefan', 'Kostic'); $demon2 = new Student('Mina', 'Reljic'); $demon3 = new Student('Filip Zivkovic');
?>
Korišenjem imenskog prostora (namespace) vrši se formiranje imenovanih oblasti tako da dve razliite imenovane oblasti mogu da sadre funkcije i promenljive istog naziva.
… }
Ukoliko se ne defineše namespace, koristi se globalni namespace. Subnamespace je namespace koji se nalazi unutar nekog drugog namespace-a namespace myNamespace/subnamespace;
Elementima koji se nalaze u drugom namespace-u se moe 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 pozivanje elemenata koji se nalaze u njegovom subnamespace-u dovoljno je da se navede samo naziv subnamespace-a.
Kako se ne bi stalno navodio i naziv namespace-a, moe se definisati alias preko koga se moe pristupati pomou use komande. use myNamespace\myClass as newClassName; use myNamespace\myClass as myClass; use myNamespace\myClass; // ovo ima isto znaenje
kao i prethodna istrukcija
Funkcija spl_autoload_register za automatsko ucitavanje fajlova.
spl_autoload_register( function ($class) {
}); $obj = new myClass();
Ovim mehanizmom se omoguavava da se koriste klase iz drugih fajlova bez njihovog uvezivanja pomou include ili require.
Koncepti obrade izuzetaka Klasa Exception Izuzeci koje korisnik definiše
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 prosleuje bloku catch (da bi ga blok presreo) jeste objekat prosleen iskazu throw koji je generisao izuzetak.
30
} catch (Exception $e) {
} ?>
31
Konstruktor te klase prihvata 2 parametra: tekst poruke o grešci i broj greške getCode() - vraa broj greške koji je bio prosleen konstruktoru getMessage() - vraa tekst poruke koja je bila prosleena konstruktoru getFile() - pozivajuem kodu vraa punu putanju datoteke u kojoj je generisan
izuzetak getLine() - vraa broj reda koda u kome je generisan izuzetak getTrace() - vraa niz s podacima o stablu pozivanja koji omoguavaju
utvrivanje mesta na kome je generisan izuzetak getTraceAsString () - vraa iste podatke kao getTrace(), formatirane kao
znakovni podaci __toString() - omoguava da se iskazu echo direktno prosledi ceo sadraj
objekta Exception, sa svim podacima koje daju navedene metode
32
Slui za konekciju izmeu PHP i MySQL, pomou OO Primer:
$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()){ //…
Slui za konekciju izmeu PHP i baze, pomou OO Sinopsis:
PDO { public __construct ( string $dsn [, string $username [, string $passwd
}