Guide: PHP- & MySQL-innføring: Kapittel 7
Objekt-orientering
Etter en lengre juleferie skal vi dekke objekt-orientering, som er en metode for å sette data og oppførsel i sammenheng.
Statiske metoder og variable
En statisk metode eller variabel, er noe som er felles for alle instanser av en klasse. I stedet for å kalle en metode på et faktisk objekt, kan en statisk metode kalles direkte på klassen. En statisk variabel er lik for alle instansene av en klasse, og om du setter den i et objekt, så vil alle objektene observere den nye verdien.
Selve muligheten for å gjøre noe statisk kan virke noe forvirrende i begynnelsen, fordi hele poenget med objekt-orientering var å gruppere data og oppførsel, men ved å lage metoder som jobber på klassen og ikke på enkeltobjekter forsvinner noe av dette. Statiske medlemmer er derimot veldig nyttig om man vil gruppere felles oppførsel for en klasse når det gjelder ting som ikke nødvendigvis har noe med et enkelt objekt å gjøre.
En vanlig ting å gjøre med statiske metoder og medlemsvariabler er å implementere et såkalt Singleton-pattern. Det blir benyttet til å sørge for at det alltid kun finnes en instans av klassen. Her er en implementasjon;
<?php
class Singleton
{
private static $singletonObject;
public static function GetInstance()
{
if (!isset(self::$singletonObject))
{
self::$singletonObject = new self();
}
return self::$singletonObject;
}
public $variabel;
}
$singleton = Singleton::GetInstance();
$singleton->variabel = 3;
print_r($singleton);
$nr2 = Singleton::GetInstance();
print_r($nr2);
?>
Statiske medlemsvariabler og metoder deklareres med nøkkelordet static, og det må skje etter du har angitt synligheten. Du trenger ikke å angi synlighet for statiske funksjoner og variabler, standard synlighet blir da satt til public.
Den vante variabelen $this er naturlig nok ikke tilgjengelig i statiske metoder, siden vi ikke har et objekt å jobbe på. I stedet benytter vi self (merk at det ikke er noe dollar-tegn foran navnet, siden det ikke er en variabel). self peker på klassen den kjører i, og vi kunne i dette tilfellet like gjerne ha byttet ut self med Singleton alle plasser vi har brukt det.
For å få tilgang til statiske metoder og variable, bruker vi en annen syntaks enn vi gjør på objekter. Klassenavnet, umiddelbart etterfulgt av to kolon, og deretter variabelnavnet (med dollartegnet foran) eller funksjonsnavnet gjør trikset.
Det kan være verdt å bite merke i at man fra en statisk metode har tilgang til både private, beskyttede og offentlige variabler og metoder i objekter laget av den samme klassen. Eksempelet under skriver ut tallene 1, 2 og 3;
<?php
class TilgangsTest
{
public static function BrukObject($objekt)
{
echo $objekt->var1,"\n";
echo $objekt->var2,"\n";
echo $objekt->var3,"\n";
}
private $var1 = 1;
protected $var2 = 2;
public $var3 = 3;
}
$a = new TilgangsTest();
TilgangsTest::BrukObject($a);
?>
Det finnes selvsagt mange andre bruksområder for statiske metoder og variable, men dette gir deg en grunnleggende innføring i prinsippet bak dem. Singleton-klassen vår over er ikke komplett, men det finns to gode implementasjoner i PHP-manualen (den beste finnes i kommentarene nederst på siden).