OOP - statiska egenskaper

I denna artikeln går vi igenom vad statiska metoder är.

I objektorienterad programmering kan man även deklarera egenskaper som statiska i en klass. Dessa kan man hänvisa till/anropa anropa utan att ha en instans av klassen med hjälp av ::-operatorn på följande sätt:

PHP - PHP: Hypertext Preprocessor
<?php // Exempel på användning av statiskt variabel KlassensNamn::variabelnsNamn; // Exempel på anrop till statisk funktion KlassensNamn::metodensNamn(); ?>

Man deklarerar egenskaper som statiska genom att sätta nyckelordet static framför dem när man deklarerar dem. Här kommer ett snabbt exempel:

PHP - PHP: Hypertext Preprocessor
<?php class Test{ // Exempel på en statisk variabel public static $teststräng = 'abc'; // Exempel på en statisk metod public static function testMetod(){ return $this->teststräng.'def'; } } echo 'Variabeln i klassen har värdet: '.Test::teststräng.'<br>'; echo 'Metoden i klassen returnerar värdet: '.Test::testmetod(); ?>
Variabeln i klassen har värdet: abc
Metoden i klassen returnerar värdet: abcdef

I en statiskt metod kan man inte använda sig av några instansvariabler, såvida de inte blivit deklarerade som statiska. En instansvariabel deklarerad som statisk är egentligen inte en instansvariabel längre, utan man brukar kalla dem för klassvariabler istället. Detta namnet är mer beskrivande, eftersom variabeln snarare tillhör klassen mer än en instans av den. Alla instanser av klassen delar nämligen samma statiska variabler.

Vad har man för nytta av detta, då? Jo, ett exempel är om man vill hålla koll på hur många instanser av en klass man har skapat.

PHP - PHP: Hypertext Preprocessor
<?php class Test{ // Hur många instanser av klassen som har skapats public static $antalInstanser = 0; public function __construct(){ // Öka antalet instanser med 1 Test::antalInstanser++; } } $a = new Test(); $b = new Test(); $c = new Test(); echo 'Vi har nu '.Test::antalInstanser.' instanser av klassen Test.'; ?>
Vi har nu 3 instanser av klassen Test.

Vanligare är att man enbart vill tillåta en instans av en klass, och då kan en statisk variabel liknande den ovan vara lösningen.

Kan vi göra någon metod statisk i vår Datum-klass?