logo   PHP - OOP Struktur




KLASSER


Et OOP-program kaldes oftest en 'klasse' (class).


Da koden anvendes til datamæssig behandling af et objekt er betegnelsen 'objekt orienteret' nærliggende.


Koden til en klasse kan se sådan ud x


Det tildeles et meningsfyldt og mnemoteknisk hensigtsmæssigt 'klassenavn' med relation til den opgave (det objekt), det skal håndtere data for.


Ved oprettelse defineres en klasse som:

class klassenavn {}

Al klassens kode placeres mellem {}.


Hver klasse gemmes som en selvstændig fil - gerne i mappen 'CLASSES'. Standarden for filnavne for php-klasser ser således ud:

klassenavn.CLASS.PHP




FRONTENDPROGRAM / OBJEKT / INSTANS


Koden i en klasse gøres tilgængelig / brugbar ved at knytte den til php-kode i en almindelig HTML-side ('frontendprogram') - den side, den skal bruges på. Tilknytningen sker ved øverst i HTML-siden at indsætte:

require_once 'Klassenavn.class.php';
$frontendnavn = new Klassenavn();

$frontendnavn eller objektnavn er klassens valgfrie kaldenavn i frontendprogrammet. Frontendprogrammet får derved tildelt sin egen version af klassen og dens kode. Klassen kaldes nu en 'instans' og tilknytningen kaldes 'instantiering'.


'Klassenavn' er navnet på den klasse, der aktuelt skal hrentes en kopi af fra klasse-mappen.


Et frontendprogram kan se sådan ud x




METODEKALD


Brugen af koden i en klasse skal startes fra frontendprogrammet ved et metodekald.


Metodekald placeres der, hvor de hører hjemme i frontendprogtrammets procedure forløb og ser sådan ud:


Ved direkte kald:

I frontendprogrammet$frontendnavn -> metodenavn(parametre);frontend navnet er valgfrit og kan tilpasses den aktuelle situation.
I klassenpublic/private function Metodenavn(){}metoden med det pågældende navn starter


Ved kald fra FORM anvendes lidt mere kode:

I formen<input type="submit" name="navn" value ="Værdi" />
I frontendprogrammetif(isset($_POST['navn'])) {
$frontendnavn -> metodenavn(parametre);
}
'navn' og 'metodenavn' på samme kodelinie etablerer link mellem formen og den metode, der skal bruges.
I klassenpublic/private function Metodenavn(){}metoden med det pågældende navn starter

Der kan være et ubegrænset antal metodekald fra et frontendprogram og / eller fra flere 'submit'-knapper.


En klasse skal ofte bruge en eller flere parametre for at kunne udføre sin opgave. Identer for de parametre, der skal bruges indsættes i () for den kaldte funktion. F.eks:

($id, $antal, $pris, $navn)

Parametrene skal forinden være til stede i frontendprogrammet som variabler med de relevante værdier tilknyttet.




INDHOLD I KLASSE


Variabler / Funktioner:




Public / Private / (protected):


Med Public, private og protected (der kaldes 'access modifyers') kan man styre tilgængeligheden /synligheden (visibility) for den kode de er knyttet til. De 3 grader kaldes også 'encapsulation'.


Alle variabler og funktioner skal principielt have tilknyttet en PPP. Public er default og behøver derfor ikke blive anført. Det er dog 'god skik at gøre det for at vise at mangelen ikke er en forglemmelse.


PRIVATE

Kan kun tilgås fra den klasse, hvori den findes.

PROTECTED

Kan læses fra aktuel klasse og andre klasser ' i lige linie'. Bruges kun i begrænset omfang i PHP


PUBLIC


this->


Ved alle kald til variabler og funktioner skal anvendes et 'prefix'. Ved kald udefra (protected og public) skal anvendes klassens navn. Ved kald fra en funktions kode til en variabel / anden funktion inde i aktuel klasse anvendes variablen '$this'.


$this->FlereVare($id,$antal);



Efter udførelse af den kaldte metode vendes tilbage næsrte linie i aktuel metode udføres.

:




:



-----------------------------------------------------


I en klasses 'body' (mellem {}) kan indsættes:


Klassevariabler:

private $varnavn


Constructor

.


Constructoren kan enten have klassens navn eller hedde '__construct'.


Det er langt fra altid, der er behov for en constructor. Den indeholder typisk variabler. For hver variabel, der skal indgå i constructoren skal der være defineret en 'klassevariabel'. Evt. data tilgår den ved instansens start ved (gen)start af frontendprogrammet. Datatilgangen


public function __construct(){}

Kan i stedet have klassens navn.


Get og set funktioner



public function getVarnavn() {return $this->varnavn;}
public function setVarnavn($value) {$this->varnavn = $value;}


Almindelige funktioner


De almindelige funktioner indeholder den kode, der skal udføres. Der er ingen regel for om man skal tilstræbe meget eller lidt kode i hver funktion. Ved små funktioner bliver antallet stort og dermed vanskeligere at overskue. Ved store funktioner kommer man nemmere ud for at to funktionaliteter ikke er 'helt' ens, hvorved der bliver behov for to.


public / private function Funknavn() {}


Public/private/this




























x
x