Genomgång - Objektorienterad programmering
Viktgt att du lär dig vad som menas med följande och att du kan skilja dem åt:
Klass Objekt Attribut Metod Konstruktor Arv
Exempel 1
<?php include 'counter.php'; include 'head.php'; $a = new Counter(); echo $a->getValue() . '<br>'; // $a->value--; // Går inte att komma åt eftersom attributet är private. $i = 0; while ($i < 20){ $a->klick(); $i++; } echo $a->getValue() . '<br>'; $b = new Counter(); $b->klick(); echo $b->getValue() . '<br>'; $b->zero(); echo $b->getValue() . '<br>'; include 'foot.php';
Klassen Counter ligger i en separat fil, counter.php.
Klassen kan ligga i samma fil som huvudprogrammet, men försök att lägga det i separat fil.
<?php class Counter{ private $value; public function __construct(){ $this->value = 0; } public function klick(){ $this->value++; } public function getValue(){ return $this->value; } public function zero(){ $this->value = 0; } }
Exempel 2
<?php include 'animals.php'; include 'head.php'; $a1 = new Animal(); // Skapar en ny instans (objekt) av klassen Animal. Vikten blir 0 (se klassen). echo 'Djur 1 har vikt: ' . $a1->getWeight() . '<br>'; // -> för att komma åt objektets metoder. $a2 = new Animal(23); // Skapar en ny instans (objekt) av klassen Animal med vikt 23. $a2->setLegs(2); // Ändrar till 2 ben. echo 'Djur 2 har vikt: ' . $a2->getWeight() . '<br>'; echo 'Djur 2 har ' . $a2->getLegs() . ' ben<br>'; echo $a2->info(); $d1 = new Dog(18); // Skapar en ny instans (objekt) av klassen Dog. $d1->setLegs(3); // Versionen av setLegs i Dog körs så inget ändras. echo 'Hund 1: ' . $d1->getLegs() . '<br>'; echo 'Hund 1: ' . $d1->getWeight() . '<br>'; echo $d1->info(); // Det kan vara bra att fatta vad som händer här... include 'foot.php';
Klasserna ligger i en separat fil, animals.php. Här har jag två klasser i samma fil, men ofta har man en fil per klass.
<?php class Animal { // Alla attribut ska vara private eller protected för att kapsla in dem. // Metoder som ska gå att komma åt utifrån deklareras som public. protected $weight; // Går att komma åt denna variabel i underklassen Dog om det är satt som protected. private $legs; // Kommer inte åt denna variabel i underklassen Dog om det är satt som private. public function __construct($weight=1000){ //Defaultvärde kan anges. $this->weight = $weight; $this->legs = 10; } public function getWeight() { return $this->weight; } public function setWeight($weight) { $this->weight = $weight; } public function getLegs() { return $this->legs; } public function setLegs($legs) { $this->legs = $legs; } public function info() { return 'vikt: ' . $this->getWeight() . ' ben: ' . $this->getLegs() . '<br>'; } } class Dog extends Animal { // Ny definition av konstruktorn som sätter antal ben till 4. public function __construct($weight=1000){ $this->weight = $weight; parent::setLegs(4); // Anropar versionen av funktionen i Animal. } // Ny definition av funktionen som också finns i Animal så att det inte ska gå att ändra antal ben. public function setLegs($legs){ } // Ny definition av funktionen som också finns i Animal. public function getWeight(){ return 'Hunden har vikten: ' . $this->weight; } // Ny definition av funktionen som också finns i Animal. public function getLegs() { return 'Hundben: ' . parent::getLegs(); // Anropar versionen av funktionen i Animal. } // Övriga funktioner ärvs från klassen Animal (parent) till klassen Dog (child). }