Klasser i PHP 5
Förord
I den här artikeln tar jag upp grundläggande kunskap om hur man skapar och använder klasser i PHP. Koden är tämligen enkel och syftar inte att ge exempel för en reel applikation, utan bara att visa hur klasser fungerar i PHP.Innehåll
»»
»
»
»
Klasser i PHP 5
Syntaxen för att beskriva en klass i PHP 5 skiljer sig ganska mycket från den i tidigare versioner. Har du programmerat i Java, C# eller liknande kommer du känna igen dig. Vi börjar med att skapa en klass som vi kallar Elev.
class Elev {
protected $namn;
protected $klass;
public function getNamn() {
return $this->namn;
}
public function getKlass() {
return $this->klass;
}
}
Nu har vi skapat en klass med namnet Elev, som vi har gett egenskaperna namn och klass. Vi har också gett den medlemsfunktioner getNamn() och getKlass(). Nyckelordet protected betyder att endast klassen själv, och klasser som ärver från klassen har tillgång till egenskapen eller medlemsfunktionen som anges. Public betyder att tillgången till egenskapen eller medlemsfunktionen är publik eller allmän.
Men vad är det för mening med vår nyskapade klass om vi inte kan ge dess egenskaper några värden? För att lösa detta problem lägger vi till två medlemsfunktioner:
public function setNamn($namn) {
$this->namn = $namn;
}
public function setKlass($klass) {
$this->klass = $klass;
}
Variabeln med namnet this är en pekare till objektet själv, precis som i de flesta objektorienterade programmeringsspråk. Nu kan vi skapa ett objekt av typen Elev och ge det värden på följande sätt:
$temp_elev = new Elev();
$temp_elev->setNamn('Oskar Arvidsson');
$temp_elev->setKlass('NVNA3E');
Vi kan skriva ut informationen om vår nya elev på följande sätt:
echo 'Namn: ' . $temp_elev->getNamn() . '
' .
'\n' . 'Klass: ' . $temp_elev->getKlass();
Konstruktorer
Varje objekt av typen Elev torde väl ha ett namn och en klass, kan man tycka. Finns det något sätt att skapa ett objekt av typen Elev med värden för namn och klass direkt?- Ja, med hjälp av en konstruktor.
class Elev {
protected $namn;
protected $klass;
public function __construct($namn, $klass) {
$this->namn = $namn;
$this->klass = $klass;
}
public function getNamn() {
return $this->namn;
}
public function getKlass() {
return $this->klass;
}
}
Nu kan vi med hjälp av konstruktorn __construct, som är ett nyckelord i PHP, skapa ett nytt objekt av typen Elev. __construct() är synonymt med Elev(), men vänj dig gärna vid att använda __construct, eftersom det underlättar vid arv (jag kommer inte gå in på arv i den här rtikeln). Nu skapar vi ett nytt objekt på följande sätt:
$temp_elev = new Elev('Oskar Arvidsson',null NVNA3E');
Destruktorer
Vanligtvis klarar PHP själv av att städa bort objektet när skriptet stängs. Allt minne som ett objekt upptar frigörs, anslutningar stängs, och så vidare. Ibland kan det dock vara idé att skapa en egen destruktor, en medlemsfunktion som kallas för att ta bort ett objekt. I PHP har destruktorn det fördefinierade namnet __destruct(). __destruct() kan inte ta några argument och ska inte heller returnerar något värde.I fallet med klassen Elev finns inte någon jättebra anledning att definiera en konstruktor, därför är exemplet nedan bara ett exempel på hur destruktorn kan fungera.
public function __destruct() {
echo 'Tar bort ' . $this->name . '.';
}
När skriptet stängs kommer PHP nu skriva ut ”Tar bort Oskar Arvidsson.” (förutsatt att värdet på objektets egenskap namn i fråga är just ”Oskar Arvidsson”.
Utskrift av objekt
I PHP finns en inbyggd funktionalitet för utskrift av objekt. Genom att definiera en medlemsfunktion kallad __toString (jämför __construct) kan du som programmerare bestämma hur ett objekt ska skrivas ut. Exempel:
public function __toString() {
return 'Namn: ' . $this->namn . '
' .
'\n' . 'Klass: ' . $this->klass;
}
Nu är det bara att skriva ut objektet på följande sätt:
echo $temp_elev;
PHP kommer automatiskt att kolla om det i klassen Elev finns någon medlemsfunktion med namnet __toString som inte tar några argument.
Pelle Johansson
http://www.derigomedia.com/hack/arkiv/hack20070418.html