2. Objekti u PHP-u
● objekti uvedeni u verziji 4
● (skoro) puna podrška za objekte u PHP5
● jednostruko naslje ivanjeđ
● konstruktor / destruktor
● enkapsulacija
● ne podržava polimorfizam ali se isti može simulirati
● stati ke funkciječ
3. PHP klase
class MojaKlasa extends Roditelj {
var $varijabla; //
var $varijabla2; // var!
function funkcija ($arg1, $arg2=0) {
.
.
}
}
4. Konstruktor i destruktor
class MojaDrugaKlasa {
var $varijabla;
function __construct ($arg1) {
$this->varijabla=$arg1;
}
function __destruct () {
.
}
} destruktor ne
prima argumente
5. Pristup varijablama i metodama
$element1= new MojaKlasa();
$element1->varijabla=”Marko”;
$element1->funkcija(123);
$element2= new MojaDrugaKlasa(“Stipe”);
echo $element2->varijabla;
varijable su public tipa
6. Pristup varijablama i metodama
● PHP podržava private i protected elemente
class MojaKlasa extends Roditelj {
private var $varijabla;
protected function funkcija ($arg1,
$arg2=0) { ... }
function getVarijabla() {
return $this->varijabla;
}
}
klasa djeca izvana
public da da da
protected da da ne
private da ne ne
7. Naslje ivanjeđ
class Roditelj {
var $varijabla;
private var $varijabla2;
function funkcija ($arg1, $arg2=0) {
}
}
class MojaKlasa extends Roditelj {
function funkcija2 ($arg) { ..}
} MojaKlasa NEMA $varijabla2!!
8. Nadja avanje (overriding)č
● samo se stvori nova metoda istog naziva u
klasama djeci
class MojaKlasa extends Roditelj {
function funkcija ($arg) { ..}
}
● ako se želi blokirati nadja anje, u roditelju se zač
željenu metodu stavi klju na rije “final”č č
final function funkcija ($arg1,
$arg2=0) { .. } “finalna” može biti i klasa
kojoj ne dopuštamo
naslje ivanjeđ
varijable ne mogu biti finalne
9. Interface & abstract
● PHP podržava su elja i apstraktne klaseč
Interface Mail {
public function posaljiMail();
}
class Raport implements Mail {
// mora postojati metoda posaljiMail
}
abstract class Lista {
abstract function getLista() { }
}
Interface – sve metode su apstraktne, samo po sebi nije klasa
Abstract – barem jedna metoda mora biti apstraktna,
ne može se instancirati
10. Preoptere ivanjeć
● PHP ne podržava preoptere ivanjeć
● ali ga može dobro simulirati
– broj i tip argumenata funkcije nisu “striktno” definirani!
class MojaKlasa extends Roditelj {
function funkcija ($arg1) {
if (is_string($arg1)) {...}
else
if (is_int($arg1))
$varijabla=func_get_arg(1);
}
}
11. Statika?
● želimo koristiti metode klase bez instanciranja?
class MojaKlasa extends Roditelj {
function podnozje() {
return 'Copyright by me,
2011';
}
}
echo MojaKlasa::podnozje();
12. Roditelj?
● klju na rije parent daje referencu na roditeljsku klasuč č
class MojaKlasa extends Roditelj {
function funkcija ($arg1) {
$međurezultat=parent::drugaFunkcija();
. . .
}
}
13. Serijalizacija
● PHP ima funkcije serialize i unserialize
$mojElement=new MojaKlasa;
$serijalizirano=serialize($mojElement);
$noviElement=unserialize($serijalizirano);
● kako klase nije (uvijek) trivijalno serijalizirati
● __sleep()
– pokre e se prije serijalizacijeć
● __wakeup()
– pokre e se nakon serijalizacijeć
14. stdClass
● PHP ima generi ku praznu klasuč
● stdClass
● Napomena: to nije bazna klasa za sve klase
● koristi se kad je potrebna anonimna klasa samo
u tom trenutku ( esto zamjena za arrayč
podataka)
15. Dodatne funkcije
● PHP nudi dodatne funkcije za rad sa klasama
● get_parent_class()
● class_exists()
● method_exists()
● get_object_vars()
– zgodno, daje array svih varijabli iz objekta
● za više informacija pogledajte www.php.net
16. JavaScript objekti
● sve je objekt
● sve
– sve
● stvorimo varijablu i instanciramo op eniti tip Objectć
● Object je bazna klasa za sve objekte
var lopta=new Object;
lopta.boja=”red”;
lopta.velicina=”40”;
lopta.kotrlja=function() {
return udaljenost=this.velicina*this.snaga;
}
17. Objekti
● stvaranje
● var lopta = new Object;
● var lopta= { };
● dodavanje varijable
● samo je po nemo koristitič
● lopta.boja=”red”;
● dodavanje metoda
● kao jednu varijablu definiramo funkciju
lopta.kotrlja=function(snaga) {
return udaljenost=this.velicina*snaga;
}
18. Objekti u novom svjetlu...
● u JavaScriptu su i funkcije objekti
● nova “klasa” se instancira kao funkcija
function student(ime, prezime, jmbag) {
this.ime=ime;
this.prezime=prezime;
this.jmbag=jmbag;
this.ispisi=function() {
alert(this.ime+' '+this.prezime+':'+this.jmbag);
}
}
var jedanStudent=new student('Ivan','Horvat','0246002323');
konstruktor (ili najbliže tome)
19. Dodavanje metode
● JavaScript dopušta dodavanje metode nakon
po etne definiciječ
● klju na rije prototypeč č
student.prototype.promjeniJMBAG = function(jmbag)
{
this.jmbag = jmbag ;
}
● ovim na inom se mogu proširiti metode zač
ugra ene JavaScript objekteđ
20. Pristup varijablama
● varijable se ponašaju kao da su u polju
● jedanStudent.ime je isto kao
jedanStudent[“ime”]
● može se pro i kroz objekt kao kroz poljeć
– for (var podatak in jedanStudent )
– daje “ime”, “prezime”, “jmbag”, “ispisi”
– jedanStudent[podatak] daje prave podatke!
● možemo provjeriti postoji li varijabla ili metoda
– if (“ime” in jedanStudent)
21. Naslje ivanjeđ
● naslje ivanje u JavaScriptu se može izvesti na nekoliko na ina.đ č
● najjednostavniji
function superClass() {
this.bye = superBye;
this.hello = superHello;
}
function subClass() {
this.bye = subBye;
}
subClass.prototype = new superClass;
ovim prototype-om
unosimo ne samo
novu metodu, nego
cijelu klasu
22. function superHello() {
return "Hello from superClass";
}
function superBye() {
return "Bye from superClass";
}
function subBye() {
return "Bye from subClass";
}
var newClass = new subClass();
ova metoda nadja ač
metodu roditelja
ova metoda e bitić
nadja anač
ova metoda e ostatić
u djeci
23. Literalni oblik objekta
● kod instanciranja jednog objekta koristi se i literalni oblik
student = {
ime : "Ivan",
prezime: "Horvat",
ocjene : [ {predmet:"Programiranje", ocjena:2 },
{predmet:"Digitalni sklopovi", ocjena:2} ],
getOcjene : function(){
for (ocjena in this.ocjene)
alert(this.ocjene[ocjena].predmet);
}
};
student.getOcjene(); nema potrebe za
instanciranjem varijable
tipa objekt
24. JSON
● izbacivanjem metoda i zadržavanjem varijabli dobiven
je JSON
● JavaScript Object Notation
● koristi se za prenos podataka
– kao i XML, ali je JSON jednostavniji i itljivijič
● JSON datoteka prenesena preko mreže se mora parsirati
– starija metoda (nesigurnija)
● var p = eval("(" + jsonText + ")");
– postoje javascript “klase” koje parsiraju json
– browseri imaju ugra enu podršku za sigurno parsiranje jsonađ
● var p=jsonText.parse();
26. OO i JavaScript
● JavaScript (EcmaScript 5) nije osmišljen kao
klasi ni OO jezikč
● ali osnovne stvari radi OK
● OO je potreban zbog rada u skoro svakom
frameworku
● za više informacija
● Stefanov S. (2010), JavaScript Patterns, O'Reilly
Media
27. EcmaScript 6
● EcmaScript 6 donosi veliki pomak prema
“tradicionalnom” radu s objektima
class Shape {
constructor (id, x, y) {
this.id = id;
this.move(x, y);
}
move (x, y) {
this.x = x;
this.y = y;
}
}
class Rectangle extends Shape {
constructor (id, x, y, width, height)
{
super(id, x, y);
this.width = width;
this.height = height;
}
}
class Circle extends Shape {
constructor (id, x, y, radius) {
super(id, x, y);
this.radius = radius;
}
}