Den största och enligt mig bästa uppdateringen till PHP5 som släpptes för mer än fyra år sedan är den utökade objektmodellen. Tyvärr är det dock väldigt sällan man ser objektorientering utnyttjas i PHP, vilket är synd, då det ofta bidrar till bättre organiserad kod och separation av olika delar av en applikation.
I en liten miniserie om objektorientering i PHP kommer jag ta upp det mest grundläggande delarna inom objektorientering med PHP.
Vad är då objektorientering egentligen?
Objektorientering är ett sätta att programmera, där man separerar olika delar för sig. När man talar om OOP är ofta det första man hör ”Klasser” och ”Objekt”. Vad är då detta, vad är skillnaden?
En klass är en definition, en beskrivning för hur ett objekt skall se ut, samtidigt som objektet är den ”fysiska” produkten utav en klass. Detta kan enkelt relateras till bilar, där ritningen (klassen) som säger hur bilen ska se ut, vilka funktioner den skall ha (gasa, bromsa, svänga), och objektet den fysiska, tillverkade bilen.
Klasser består utav attribut (egenskaper) och metoder (funktioner). Ett attribut är en egenskap för ett objekt, där det till vår bil skulle kunna vara en färg eller ett registreringsnummer. Metoder är funktioner, som säger åt ett objekt hur det skall bete sig. Vår bil skulle till exempelvis kunna ha en metod som säger åt bilen hur den skall gasa eller svänga.
Nåja, mycket text är tråkigt att läsa, så vi drar igång med ett simpelt kodexempel:
/* Början av vår klassdefinition */
Class Bil
{
/* Våra attribut (egenskaper) */
private $farg;
private $fardriktning;
/* Våra metoder */
public function svang($riktning)
{
$this->fardriktning = $ riktning;
}
public function bytFarg($farg)
{
$this->farg = $farg;
}
}
Här deklarerar vi en ny klass, Bil. Vi specifierar även två stycken attritbut, färg och fardriktning. Till detta skapar vi även två metoder, en för att svänga, och en för att byta färg på bilen. För att skapa en bil gör vi enligt följande:
$bil = new Bil();
$bil->bytFarg(‘Blå’);
$bil->svang(‘Vänster’);
Här skapar vi alltså ett ny variabel, $bil, som vi sedan sätter till ett nytt Bil-objekt. Vi byter sedan färg på bilen till blå, och svänger vänster.
Här är antagligen något nytt för PHP-programmerare som inte använt objektorientering innan, nämligen ”->”. Dessa pilar används för att anropa en metod som tillhör en klass.
Någonting annat som antagligen är okänt för en oerfaren objektorienterare är nyckelorden ”private” och ”public” i vår klassdefinition. Dessa nyckelord specifierar att en metod är privat eller publik, i praktiken innebär detta att privata metoder och attribut endast är åtkomliga från inifrån klassen, medan publika metoder och attribut är åtkomstbara överallt.
Jag använder även nyckelordet $this en hel del. Varför? Jo därför att $this refererar till det egna objektet. Som vi vet lever en variabel endast inuti en metod eller funktion, vilket innebär att vi måste referera till objektet med $this om vi vill komma åt klassens egna attribut.
MEN, måste inte en bil alltid ha en färg? Naturligtvis måste den det. Detta löser vi med någonting som kallas för konstruktor, vilket är en helt vanlig metod. En konstruktor är en metod som ALLTID körs när ett objekt skapas. Ett exempel på en lämplig konstruktor är följande:
/* Konstruktor */
public function __construct($farg)
{
$this->farg = $farg;
}
Det vi gör här är alltså att definiera en konstruktor, notera att metodnamnet alltid måste deklareras enligt __construct. Vi ser även att konstruktorn tar en inparameter, $farg. Detta innebär att vi måste skicka med en färg när vi skapar vårt objekt, enligt följande:
$bil = new Bil(‘Färg’);
Detta var allt för idag, återkommer med nästa del vid ett senare tillfälle. Så länge håller jag tilgodo med ett simpelt program:
Class Person
{
private $name;
private $age;
public function __construct
($name,
$age)
{
$this->
age =
$age;
$this->
name =
$name;
}
public function getName
()
{
return $this->
name;
}
public function haveBirthday
()
{
$this->
age++;
}
public function getAge
()
{
return $this->
age;
}
}
$person = new Person(‘Alexander’, 19);
echo $person->getName() . ‘ är ‘ . $person->getAge() . ‘ gammal.’;
$person->haveBirthday();
echo $person->getName() . ‘ är nu ‘ . $person->getAge() . ‘ gammal.’;
Studera och förstå!