160 likes | 319 Vues
Web-programmering. Objektorientert programmering i PHP del 2. I dag. Litt mer avansert bruk av objektorientert PHP Gjennomgang av kode. Oppgaveløsning Ukeoppgaver. Oblig 1 leveres 6. mars. Objektorientert PHP forts. Omfang ( Scope ) på attributter og metoder Get , Set funksjoner Arv
E N D
Web-programmering Objektorientert programmering i PHP del 2
I dag • Litt mer avansert bruk av objektorientert PHP • Gjennomgang av kode. • Oppgaveløsning • Ukeoppgaver. • Oblig 1 leveres 6. mars
Objektorientert PHP forts. • Omfang (Scope) på attributter og metoder • Get, Set funksjoner • Arv • Bruk av sessions
Objekter og metoder/funksjoner <?php Class bil { public $tank; public $forbruk; function rekkevidde() { $rekkevidde = $this->tank/$this->forbruk; return $rekkevidde; } } $volvo = new bil(); $volvo->tank = 80; $volvo->forbruk = 0.7; $rekkeviddeImil = $volvo->rekkevidde(); echo "Rekkevidden til bilen er "; echonumber_format($rekkeviddeImil,0)." mil"; ?> Rekkevidden til bilen er 114 mil
Omfang (scope) på attributter • Public (åpen utenfor klassen) • Private (kan bare brukes inne i klassen) • Protected (brukes inne i klassen og arvede klasser) • Const (konstant) • Var (samme som public)
Eksempel på omfang av variabler <?php Class bil { public $tank; private $forbruk; var $antallHK; const $antallHjul = 4; } $volvo = new bil(); $volvo->tank = 80; $volvo->forbruk = 0.7; // dette går ikke! $volvo->antallHK = 230; echo $volvo->antallHjul; ?> Vil resultere i en ”fatal” error når det kjøres
Omfang av metoder (functions) • Public (åpen utenfor klassen) • Private (kan bare brukes inne i klassen) • Protected (brukes inne i klassen og arvede klasser) • Ikke noe før function = public
Eksempel, omfang metoder <?php Class bil { public $tank; public $forbruk; private function beregn() { $rekkevidde = $this->tank/$this->forbruk; return $rekkevidde; } publicfunction rekkevidde() { $res=this->beregn(); return $res; } } $volvo = new bil(); $volvo->tank = 80; $volvo->forbruk = 0.7; echo $volvo->rekkevidde(); echo $volvo->beregn(); ?> Vil resultere i en ”fatal” error når det kjøres
Bruk av private attributter • Bruk Privat for alle attributter i klasser • Skriv så egne metoder for å operere på disse • Eks: • Private $navn • Public Functionset_navn($navn) • Public Functionget_navn();
Eksempel, get, set <?php Class bil { private $tank; publicfunctionset_tank($innTank) { $this->tank = $innTank; } publicfunctionget_tank() { return$this->tank; } } $volvo = new bil(); $volvo->set_tank(80); echo$volvo->get_tank; ?> • Dette for å sikre at all manipulasjon av variabelen tank skjer via metoder. • Kan utvide disse
Eksempel, get, set, utvidelse <?php Class bil { private $tank; publicfunctionset_tank($innTank) { if($innTank>0) { $this->tank = $innTank; } } publicfunctionget_tank() { return $this->tank; } } $volvo = new bil(); $volvo->set_tank(80); echo $volvo->get_tank; ?> • Nå kan det bare settes inn lovlige verdier • En tank kan ikke inneholde et negativt tankvolum.
Arv • Kan definere en klasse som arver egenskaper (metoder og attributter) fra en annen klasse. • Eksempel: • En klasse bil • En klasse lastebil som arver egenskapene til bil-klassen (extends) • Lastebil-klassen kan ha egne egenskaper og benytte egenskapene til bil-klassen.
<?php class lastebil extends bil{ private $lasteKapasitet; publicfunctionset_lasteKapasitet($last) { $this->lasteKapasitet=$last; } } class bil { private $tank; publicfunctionset_tank($tank) { $this->tank=$tank; } publicfunctionget_tank($tank) { return $this->tank; } } $volvo = new lastebil(); $volvo->set_tank(70); $volvo->set_lasteKapasitet(1000); ?> Eksempel, arv Lastebil Bil $tank $lastekapasitet set_tank($tank) get_tank($tank) set_lastekapasitet($last)
<?php class lastebil extends bil{ private $lasteKapasitet; public function __construct($last,$tank) { parent:: __construct($tank); $this->lasteKapasitet=$last; } public functionget_lasteKapasitet() { return $this->lasteKapasitet; } } class bil { private $tank; public function __construct($tank) { $this->tank=$tank; } public functionget_tank() { return $this->tank; } } $volvo = new lastebil(1000,70); echo "Tanken er ".$volvo->get_tank(); ?> Eksempel, arv, bruk av constructor
Statiske metoder (som i Java) classfilhandterer { // håndterer all filskriving staticfunctionskriv_fil($tekst) { $filref=fopen("kjoretoy.txt","a"); $ok = fwrite($filref,$tekst); } } // kall til denne klassen/metoden: filhandterer::skriv_fil($stringTilFil); • Brukes der det ikke er hensiktsmessig å opprette objekter • Generelle klasser/metoder • Kanskje litt overkill da man bare kan bruke en funksjon.
Sessions og objekter • Kan legge objekter inn i sessionvariable • Husk å ha alle klasse definisjonene i alle filene som bruker objektene i sessionene. • Samle gjerne alle klassene i en fil og inkluder den i alle de andre • Noen mer komplekse strukturer fungerer ikke som sessionsvariable • Bla. referanser til objekter.