Materijal za vežbe iz Web programiranja, IMI PMF Kragujevac Web programiranje Vežbe 5 - Funkcije i OOP Funkcije Funkcije se definišu koristeći ključnu

Слични документи
PowerPoint Presentation

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Inženjering informacionih sistema

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

PowerPoint Presentation

Tutoring System for Distance Learning of Java Programming Language

CPHP_19

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

Microsoft Word - SYLLABUS -Dinamicki

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Računarski praktikum I - Vježbe 09 - this, static

Pojačavači

Slide 1

PowerPoint Presentation

Microsoft Word - Java_introduction_NEW_SYLLABUS.doc

PowerPoint Presentation

Projekti šabloni

Uvod u računarstvo 2+2

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Tutoring System for Distance Learning of Java Programming Language

Ekonomski fakultet u Osijeku Kolegij: Elektroničko i mobilno poslovanje Nositelj: prof. dr. sc. Branimir Dukić Nastavni materijali za vježbe 3. HTML o

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

PowerPoint Presentation

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

PowerPoint Presentation

Microsoft Word - 11 Pokazivaci

Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 10 Zvonimir Bujanović Luka Grubišić Vinko Petričević

Apache Maven Bojan Tomić

SELECT statement basic form

PHP kod

Slide 1

PDO

Objektno orjentirano programiranje 2P

Upitni jezik SQL

ELEKTROTEHNIČKI FAKULTET, UNIVERZITET U BEOGRADU KATEDRA ZA ELEKTRONIKU UVOD U ELEKTRONIKU - 13E041UE LABORATORIJSKA VEŽBA Primena mikrokontrolera

Uvod u PHP

Програмирај!

Programiranje 1

Primenjeno programiranje - vezbe GUI i baze podataka

Računarske mreže Čas 2 Ivana Tanasijević Matematički fakultet, Beograd 1

Računarski praktikum I - Vježbe 11 - Funktori

Strukture predavač: Nadežda Jakšić

Microsoft PowerPoint - 6. CMS [Compatibility Mode]

Satnica.xlsx

12 Stanje

P11.3 Analiza zivotnog veka, Graf smetnji

Microsoft Word - CAD sistemi

Microsoft PowerPoint - 04_HTML_5.ppt [Compatibility Mode]

Приручник о полагању матурског испита у образовном профилу Електротехничар информационих технологија - оглед ВЕБ ДИЗАЈН У следећим задацима заокружите

PASCAL UVOD 2 II razred gimnazije

Document ID / Revision : 0419/1.1 ID Issuer Sustav (sustav izdavatelja identifikacijskih oznaka) Upute za registraciju gospodarskih subjekata

Slide 1

PowerPoint Presentation

JAВА ПРОГРАМИРАЊЕ Сврха обуке за Јава програмирање је стицање знања и вештина у области Јава програмирања са циљем повећања броја квалификованих ИТ ст

3.Kontrlne (upravlja~ke) strukture u Javi

PowerPoint Presentation

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Microsoft PowerPoint - 6. Query Builder.pptx

Državna matura iz informatike

NAPOMENA: Studenti na ispit donose kod urađenog zadatka

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Microsoft Word - ASIMPTOTE FUNKCIJA.doc

12.WT-javaScript-Drupal

Microsoft PowerPoint - GR_MbIS_12_IDEF

Microsoft PowerPoint - 11_JavaScript_1.ppt [Compatibility Mode]

Microsoft Word - EksperimentIzmenePrograma.doc

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

PHP proširenja za rad sa bazama podataka Postoje pojedinačna proširenja za različite tipove baza podataka sa svojim bibliotekama funkcija npr. postoji

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Principi softverskog inženjerstva O predmetu

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

Microsoft Word - Lekcija 11.doc

KDP

Projektovanje informacionih sistema i baze podataka

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Microsoft PowerPoint - Bitovi [Compatibility Mode]

P1.3 Projektovanje makroasemblera

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

NAUČNO-STRUČNA KONFERENCIJA LOGOPEDA SRBIJE INOVATIVNI PRISTUPI U LOGOPEDIJI Nacionalni skup sa međunarodnim učešćem Organizator: Udruženje logopeda S

Datum: 20

Uvod u računarstvo 2+2

070-ALIP2-udzbenik.indb

Algoritmi SŠ P1

ZADACI ZA VEŽBU 1. Realizovati konzolnu aplikaciju koja će računati površinu kvadrata, pravougaonika ili trougla. 2. Preko konzole se unosi ocena od 1

Model podataka

Дистрибуирани софтверски системи Технички факултет "Михајло Пупин" Зрењанин, Универзитет у Новом Саду Практикум за лабораторијске вежбе #05 [нерецензи

1, 2, 3, кодирај! Активности циклуса 4 Пројект «Аркадне игре» - Час 6: Програмирање падања новчића (наставак) Доминантна дисциплина Математикa Резиме

Microsoft PowerPoint - C-4-1

Generated by Foxit PDF Creator Foxit Software For evaluation only. Operativni sistem U računarstvu, operativni sistem (OS

Транскрипт:

Web programiranje Vežbe 5 - Funkcije i OOP Funkcije Funkcije se definišu koristeći ključnu reč function slično kao u nekim drugim programskim jezicima, recimo C-u ili Javi, kao: function ime_funkcije(parametri) telo funkcije return povratna_vrednost; Za razliku od Jave, parametri fukcije se mogu prenositi i po vrednosti i po referenci. Primer prenošenja parametara po vrednosti je: function puna_cena($cena, $porez) $total = $cena + $cena*$porez/100; return $total; function obim_kruga($poluprecnik) return 2*$poluprecnik*pi(); echo "Puna cena je ". puna_cena(100, 18); echo "<br />Obim prvog kruga je ".sprintf("%.3f",obim_kruga(6)); echo "<br />Obim drugog kruga je ".sprintf("%.3f",obim_kruga(7)); Zadatak: Napisati funkciju koja promeni_case($tekst, $kod) koja u zavisnosti od koda koji može biti V ili M, menja tekst u velika slova ili mala slova, respektivno. function promeni_case($str, $kod='') switch(strtoupper($kod)) case 'V': return strtoupper($str); break; case 'M': return strtolower($str); break; case 'N': return $str; break; print promeni_case("prirodno-matematicki fakultet Kragujevac<br/>", "M"); print promeni_case("prirodno-matematicki fakultet Kragujevac<br/>", "V"); print promeni_case("prirodno-matematicki fakultet Kragujevac<br/>"); Funkcije i OOP u PHP5 1/13

U gornjem primeru vidi se i kako se u PHP-u tretiraju podrazumevane vrednosti argumenata. Kao i u programskom jeziku Java, svi argumenti desno od prvog podrazumevanog argumenta takođe moraju imati podrazumevane vrednosti. Funkcija može da vrati i niz, a ne samo jednu vrednost. Sledeći primer to demonstrira. Zadatak: Korisnik unosi 8 e-mail adresa u 8 tekst polja unutar HTML forme. Napisati funkciju koja daje listu jedinstvenih domena izvučenih iz polja forme. <html> <head> <title>adrese i domeni</title> </head> <body> // Definicija funkcije function jedinstveni_domeni($lista) $domeni = array(); foreach ($lista as $adresa) $arr = explode("@", $adresa); if (isset ($arr[1])) $domeni[] = trim($arr[1]); return array_unique($domeni); // Ako forma jos nije poslata if (!isset ($_POST['posalji'])) echo "<form method='post' action=".$_server['php_self'].">"; for ($i=1; $i<=8; $i++) echo "Adresa $i: <input type='text' name='adrese[]' /> <br/>"; echo "<input type='submit' name='posalji' value='posalji' />"; echo "</form>"; // Obrada poslatih vrednosti else $adrese = $_POST['adrese']; if ( is_array($adrese) ) foreach (jedinstveni_domeni($adrese) as $domen) echo "<p>$domen</p>"; </body> </html> Prosleđivanje parametara po referenci U PHP-u je moguće proslediti parametar po referenci i na taj način ga učiniti mutabilnim. Mehanizam je sličan navođenju ključne reči VAR ispred parametra u programskom jeziku Pascal. Znak koji PHP koristi za referencu je &: function zameni(&$a, &$b) $temp = $a; $a = $b; $b = $temp; Funkcije i OOP u PHP5 2/13

$a = "Mika"; $b = "Pera"; echo "Pravi redosled: $a i $b.<br />"; zameni($a, $b); echo "Obrnuti redosled: $a i $b.<br />"; Drugi primer radi sortiranje niza korišćenjem jednostavnog algoritma Bubble sort, pri čemu se niz sortira u mestu. Pravo sortiranje niza naravno treba raditi ugrađenom funkcijom sort(), koja je višestruko brža. function zameni(&$a, &$b) $temp = $a; $a = $b; $b = $temp; function sortiraj(&$niz) for($i=0; $i<count($niz)-1; $i++) for($j=$i+1; $j<count($niz); $j++) if ($niz[$i] > $niz[$j]) zameni($niz[$i], $niz[$j]); $niz = array(1,5,1,7,4,6,8,2,4,1); echo "Nesortirani niz je: ".implode(', ', $niz)."<br />"; sortiraj($niz); echo "Sortirani niz je: ".implode(', ', $niz)."<br />"; Pomoćne funkcije za rad sa argumentima Skript jezici kao što je PHP omogućavaju i neke dodatne funkcionalnosti u odnosu na jezike sa statičkim tipiziranjem. Jedna od mogućnosti je da se funkcija definiše bez argumenata, a da joj se pošalje proizvojno mnogo: // definicija funkcije function neka_funkcija() // uzmi broj argumenata $numargs = func_num_args(); // uzmi argumente $args = func_get_args(); // stampaj argumente print "Poslati su mi sledeci argumenti: "; for ($x = 0; $x < $numargs; $x++) print "<br />Argument $x: "; // ako je poslat niz, iterisi kroz njega i stampaj sadrzaj if (is_array($args[$x])) print " NIZ "; foreach ($args[$x] as $index => $element) print " $index => $element "; else print " $args[$x] "; Funkcije i OOP u PHP5 3/13

// pozovi funkciju sa raznorodnim argumentima neka_funkcija("red", "green", "blue", array(4,5), "yellow"); Globalne promenljive Sledeći primer demonstrira kako se iz funkcije operiše nekom globalnom promenljivom: $danas = "Utorak"; function dan() // varijabla je globalna global $danas; $danas = "Subota"; // stampaj varijablu print "Unutar fukcije je $danas. <br />"; // print the variable print "Pre poziva funkcije je $danas. <br />"; dan(); print "Posle poziva funkcije je $danas. <br />"; Ukoliko bi se izostavila linija global $danas promenljiva $danas bila bi lokalna za funkciju. Funkcije i OOP u PHP5 4/13

OOP u PHP-u 5 Dok su neki jezici od početka projektovani kao objektno-orijentisani, sa PHP-om to nije bio slučaj. U svojim počecima, PHP je bio proceduralni skript jezik namenjen isključivo web primenama. Kako je vreme prolazilo, zajednica je tražila uvođenje objektno-orijentisanih koncepata u jezik, što je i učinjeno izdanjem PHP-a 4. Međutim, ta prva implementacija je imala mnoge slabosti, kao što su problematično referenciranje objekata, nedostatak postavljanja scope-a (public, private, protected, abstract) za atribute i metode, nedostatak destruktora, kloniranja objekata i interfejsa. Srećom, PHP5 implementacija popravlja ove nedostatke i donosi još mnogo novih mogućnosti, na taj način stvrstavajući PHP u grupu jezika sa potpuno implementiranim objektnim modelom. Sav dalji tekst se odnosi upravo na PHP5 implementaciju koja je danas aktuelna. Osnovne osobine tj. prednosti OOP-a kao koncepta su: apstrakcija kapsulacija nasleđivanje polimorfizam U daljem tekstu biće definisani osnovni pojmovi i operacije u OOP-u kod PHP5, kao što su klase, objekti, nasleđivanje, kloniranje objekata itd. Definisanje klase i instanciranje objekata class Zaposleni // Atributi protected $ime; protected $plata; // Metode function construct($ime, $plata) $this->ime = $ime; $this->plata = $plata; date_default_timezone_set('europe/belgrade'); public function stigao() echo "Zaposleni $this->ime stigao je u ".date("h:i:s")."<br />"; public function otisao() echo "Zaposleni $this->ime otisao je u ".date("h:i:s")."<br />"; public function tostring() return "Zaposleni: $this->ime sa platom $this->plata"; $mile = new Zaposleni("Mile", 2000); $mile->stigao(); sleep(1); Funkcije i OOP u PHP5 5/13

$mile->otisao(); echo $mile; Klasa Zaposleni ima dva protected atributa, konstruktor i tri metode od kojih je jedna specijalna ( tostring()). Konstruktor u jeziku PHP5 mora imati naziv construct i može imati proizvoljno mnogo argumenata, kao i podrazumevane argumente. Za razliku od Jave, u PHP-u je moguće imati samo jedan konstruktor, ali se taj nedostatak lako nadomešta dinamičkim tipiziranjem, podrazumevanim argumentima ili tzv. fabričkim statičkim metodama. Kada se obraćamo bilo kojem nestatičkom (vezanom za objekat) atributu ili metodi unutar koda same klase, moramo koristiti pokazivač $this->, što, kao i u Javi, predstavlja referenciranje objekta, tj. instance te klase. Za razliku od Jave, u PHP-u je $this obavezno! Public, private i protected imaju isto značenje kao u Javi, sa izuzetkom protected koji dozvoljava pristup samo klasama koje datu klasu nasleđuju (u Javi ceo paket može da pristupi protected objektu). U OOP praksi uobičajeno je da atributi budu private ili protected i da im se pristupa preko metoda, tzv. gettera i settera. Gornjoj klasi bi se npr. mogle dodati za postavljanje i čitanje atributa $plata: public function postaviplatu($plata) $this->plata = $plata; public function citajplatu($plata) return $this->plata; koje bi se koristile na sledeći način: $mile = new Zaposleni("Mile", 2000); $mile->postaviplatu(2500); echo $mile->citajplatu(); Konstante i statički atributi i metode Klasne konstante se definišu koristeći ključnu reč const i imaju oblast važenja na nivou klase (ne objekta!). Treba naglasiti da se u PHP-u koriste različiti separatori za instance, tj. objekte i klase, tj. -> i :: respektivno, za razliku od Jave gde se koristi isključivo separator.. Takođe, ključna reč self, se koristi kao oznaka aktuelne klase. class matematicke_funkcije const PI = '3.14159265'; const E = '2.7182818284'; const OJLER = '0.5772156649'; public function pi_kvadrat() echo self::pi * self::pi."<br />"; public static function pi_kvadrat_static() echo self::pi * self::pi."<br />"; Funkcije i OOP u PHP5 6/13

echo matematicke_funkcije::pi."<br />"; $m = new matematicke_funkcije(); $m->pi_kvadrat(); matematicke_funkcije::pi_kvadrat_static(); U gornjem primeru dat je i način na koji se definišu i pozivaju i statičke metode koje, naravno, smeju da pristupaju isključivo atributima i metodama sa klasnom oblasi važenja (konstante, statički atributi...). Evo još jednog uobičajenog primera čiji je zadatak brojanje novoformiranih instanci klase: class Posetilac private static $posetioci = 0; function construct() self::$posetioci++; static function citaj_posetioce() return self::$posetioci; // Instanciranje klase Posetilac $pos1 = new Posetilac(); echo Posetilac::citaj_Posetioce()."<br />"; // Jos jedna instanca klase Posetilac $pos2 = new Posetilac(); echo Posetilac::citaj_Posetioce()."<br />"; Destruktori Iako seu PHP-u, kao i u Javi, instancirani objekti automatski uništavaju po izlazu iz oblasti važenja ili po izlazu iz samog skripta, ponekad je potrebno dodatno prilagoditi proces destrukcije objekta, npr. zatvoriti otvorene fajlove, obraditi greške itd... Destruktor je metoda bez argumenata, a koristi se na sledeći način: class Knjiga private $naziv; private $isbn; private $broj_kopija; function construct($isbn) echo "<p>kreirana instanca klase Knjiga.</p>"; function destruct() echo "<p>instanca klase Knjiga unistena.</p>"; $knjiga = new Knjiga("1893115852"); Funkcije i OOP u PHP5 7/13

Ključna reč instanceof Isto kao i u Javi, instanceof dozvoljava da se proveri da li je objekat instanca tražene klase. Treba primetiti i da je objekat instanca klase Klasa1, i kada je instanciran kao objekat klase Klasa2 koja je izvedena iz klase Klasa1. $m = new Zaposleni();... if ($m instanceof Zaposleni) echo "Da"; a takođe je i u sledećem skriptu odgovor potvrdan: // Rukovodilac je izvedena klasa klase Zaposleni - videti dole $m = new Rukovodilac();... if ($m instanceof Zaposleni) echo "Da"; Nasleđivanje Kao većina OO jezika, i PHP5 podržava nasleđivanje klasa, po zakonima sličnim ili čak istim kao u programskom jeziku Java. Naredni primer pokazuje kako se klasa Zaposleni nasleđuje klasom Rukovodilac, koja poseduje dodatni atribute $zvanje i $bonus i metode koje rukuju ovim atributima. class Zaposleni // Atributi protected $ime; protected $plata; // Metode function construct($ime, $plata) $this->ime = $ime; $this->plata = $plata; date_default_timezone_set('europe/belgrade'); public function stigao() echo "Zaposleni $this->ime stigao je u ".date("h:i:s")."<br />"; public function otisao() echo "Zaposleni $this->ime otisao je u ".date("h:i:s")."<br />"; public function postaviplatu($plata) $this->plata = $plata; public function citajplatu($plata) return $this->plata; public function tostring() return "Zaposleni: $this->ime sa platom $this->plata"; class Rukovodilac extends Zaposleni Funkcije i OOP u PHP5 8/13

// Atributi private $zvanje; private $bonus; // Metode function construct($ime, $plata, $zvanje, $bonus) parent:: construct($ime, $plata); $this->zvanje = $zvanje; $this->bonus = $bonus; public function puna_plata() return $this->plata + $this->bonus; public function tostring() return "Rukovodilac: $this->zvanje $this->ime sa punom platom ".$this- >puna_plata().".<br />"; $pera = new Rukovodilac("Pera", 4000, "dr", 200); $pera->stigao(); // Cekaj 2 sekunde sleep(2); $pera->otisao(); echo $pera; Iz priloženog koda je očigledno da objekat klase Rukovodilac pored specifičnih osobina za tu klasu, nasleđuje i atribute i metode iz roditeljske klase. Često je potrebno pre izvršavanja specifičnog koda za datu klasu izvršiti istoimenu metodu iz roditeljske klase. Kako se to radi na primeru konstruktora klase Rukovodilac, vidi se iz gornjeg skripta. Ključna reč parent označava roditeljsku klasu, ali se isti efekat postiže i navođenjem imena klase: parent:: construct($ime, $plata); ima isti efekat kao i Zaposleni:: construct($ime, $plata); Specijalna metoda tostring() klase Zaposleni je preklopljena istoimenom metodom izvedene klase Rukovodilac. Odvajanje koda u različite fajlove i automatsko učitavanje klasa Norma programskog jezika Java nalaže da svaka javna klasa bude smeštena u posebnom fajlu. Jezik PHP po ovom pitanju nije imperativan, ali je svakako dobra praksa razdvojiti funkcionalnosti u posebne fajlove i po potrebi ih učitavati. Na primer: Fajl Zaposleni.klasa.php: class Zaposleni // Atributi protected $ime; protected $plata; // Metode function construct($ime, $plata) Funkcije i OOP u PHP5 9/13

$this->ime = $ime; $this->plata = $plata; date_default_timezone_set('europe/belgrade'); public function stigao() echo "Zaposleni $this->ime stigao je u ".date("h:i:s")."<br />"; public function otisao() echo "Zaposleni $this->ime otisao je u ".date("h:i:s")."<br />"; public function postaviplatu($plata) $this->plata = $plata; public function citajplatu($plata) return $this->plata; public function tostring() return "Zaposleni: $this->ime sa platom $this->plata"; Fajl Rukovodilac.klasa.php: require_once 'Zaposleni.klasa.php'; class Rukovodilac extends Zaposleni // Atributi private $zvanje; private $bonus; // Metode function construct($ime, $plata, $zvanje, $bonus) parent:: construct($ime, $plata); $this->zvanje = $zvanje; $this->bonus = $bonus; public function puna_plata() return $this->plata + $this->bonus; public function tostring() return "Rukovodilac: $this->zvanje $this->ime sa punom platom ".$this- >puna_plata().".<br />"; Fajl proba.php: require_once 'Zaposleni.klasa.php'; require_once 'Rukovodilac.klasa.php'; Funkcije i OOP u PHP5 10/13

$pera = new Rukovodilac("Pera", 4000, "dr", 200); $pera->stigao(); // Cekaj 2 sekunde sleep(2); $pera->otisao(); echo $pera; Funkcija PHP-a require_once omogućava da se tekst nekog spoljašnjeg fajla uključi u skript koji se izvršava. Ukoliko navedeni fajl ne postoji, prijavljuje se greška i prekida se izvršavanje skripta. Sufiks _once označava da se traženi fajl sme uključiti samo jednom. Ukoliko bi se u skripti proba.php umesto require_once upotrebio izraz require došlo bi do nepotrebnog redefinisanja klase Zaposleni. Međutim, kako nazivi fajlova u kojima se nalaze klase obično slede neku internu konvenciju programera, PHP pruža još jedan zgodni mehanizam za automatsko uključivanje potrebnih klasa, tzv. autoload. Naime, umesto višestrukih require_ondce direktiva, u gornjem slučaju je dovoljna jedna specijalna funkcija autoload($ime_klase): function autoload($ime_klase) require_once "$ime_klase.klasa.php"; $pera = new Rukovodilac("Pera", 4000, "dr", 200); $pera->stigao(); // Cekaj 2 sekunde sleep(2); $pera->otisao(); echo $pera; Funkcije i OOP u PHP5 11/13

Zadatak: Napisati PHP/JavaScript skriptu koja prikazuje formu u koju je moguće uneti podatke o jednom zaposlenom, kao i podatke o jednom rukovodiocu, gde se prikaz dodatnih polja za zvanje i bonus kontroliše checkbox poljem Rukovodilac. Skript zatim treba da odštampa unete podatke koristeći metode klasa Zaposleni ili Rukovodilac. <html> <head> <title>zaposleni/rukovodilac</title> <script type="text/javascript"> function rukovodilac_status() var rukovodilac = document.getelementbyid("rukovodilac"); var zvanje = document.getelementbyid("zvanje"); var bonus = document.getelementbyid("bonus"); if (rukovodilac.checked) zvanje.style.visibility = 'visible'; bonus.style.visibility = 'visible'; else zvanje.style.visibility = 'hidden'; bonus.style.visibility = 'hidden'; </script> </head> <body> function autoload($ime_klase) require_once "$ime_klase.class.php"; if (!isset ($_GET['posalji'])) <h1>podaci o zaposlenom/rukovodiocu</h1> <form action=" echo $_SERVER['PHP_SELF'] " method="get"> Rukovodilac <input type="checkbox" name="rukovodilac" id="rukovodilac" onchange="rukovodilac_status()"/><br /> Ime: <input type="text" name="ime" /><br /> Plata: <input type="text" name="plata" /><br /> Zvanje: <input type="text" style="visibility:hidden" name="zvanje" id="zvanje" /><br /> Bonus: <input type="text" style="visibility:hidden" name="bonus" id="bonus" /><br /> <input type="submit" name="posalji" value="posalji"> </form> else $ime = $_GET['ime']; $plata = $_GET['plata']; $zvanje = $_GET['zvanje']; $bonus = $_GET['bonus']; // Konstruisi instancu klase Zaposleni if (!isset ($_GET['rukovodilac'])) $z = new Zaposleni($ime, $plata); echo $z; // Konstruisi instsancu klase Rukovodilac Funkcije i OOP u PHP5 12/13

else $z = new Rukovodilac($ime, $plata, $zvanje, $bonus); echo $z; </body> </html> Funkcije i OOP u PHP5 13/13