Ett exempel på klass
1.19 En introduktion till klasser
OBS! DENNA SEKTION ÄR UNDER ARBETE - EJ FÄRDIG
Idén bakom klasser är att datat skall sköta sig själv.
Alla som arbetat i e något så när modernt programmeringsredskap
har någon gång använt klasser - även i VB. En
klass håller reda på sitt eget dat, samt tillhandahåller
metoder för att manipulera detta data
Exempel 1 - en mycket enkel klass
<?php
class EnKlass
{
# lokal variabel för klassen
var $klassVariabel ;
# en funktion med indata för klassvariabeln
function setVariabel( $inVal )
{
$this->klassVariabel = $inVal ;
}
# en funktion som returnerar data
function getVariabel( )
{
return $this->klassVariabel * 100 ;
}
# en funktion som tar indata och returnerar ett värde
function räknaLite( $inData )
{
return $this->klassVariabel * $inData ;
}
}
# användningsexempel
# vi skapar klassen på detta sätt
$MinKlass = new EnKlass() ;
# en funktion med en parameter
$MinKlass->setVariabel( 2 ) ;
# vi använder en funktion som returnerar ett värde
echo $MinKlass->getVariabel( ) ;
echo "<br />" ;
# vi använder en funktion som returnerar ett värde
echo $MinKlass->räknaLite( 40 ) ;
?>
Listning 1.19.1 - samples/php3_class1.php
200 80 Resultat av listning 1.19.1
Konstuerare (constructor) för klasser
När en klass skapas med new klassnamn() kan man även
välja att ge ett startvärde. Om man vill kan man även
se till att ett dafaultvärde används om man inte gett ett
värde.
<?php
class EnKlass2
{
var $klassVariabel ;
# om en funktion har samma namn som klassen kommer
# denna funktion att köras automatiskt
# detta kallas klassens kontruerare (class conctructor)
# om man inte anger ett värde sätter vi 100 som defaultvärde
# i detta exempel
function EnKlass2( $indata = 100 )
{
$this->klassVariabel = $indata ;
}
# resten är som tidigare
function setVariabel( $inVal )
{
$this->klassVariabel = $inVal ;
}
function getVariabel( )
{
return $this->klassVariabel * 100 ;
}
function räknaLite( $inData )
{
return $this->klassVariabel * $inData ;
}
}
# vi skapar klassen utan invärde till konstrueraren
# den kommer då att använda defaultvärdet (100)
$MinKlass = new EnKlass2() ;
echo $MinKlass->räknaLite( 40 ) ;
echo "<br />" ;
# konstrueraren får ett invärde
$MinAndraKlass = new EnKlass2( 3 ) ;
echo $MinAndraKlass->räknaLite( 40 ) ;
?>
Listning 1.19.2 - samples/php3_class2.php
4000 120 Resultat av listning 1.19.2
Arv (inheritace)
Vill man bygga på funktionaliteten behöver man inte nödvändigtvis
ändra på klassen - man kan även skapa en ny klass som
ärver en tidigare klass. I nedanstående exempel skapas en
ny klass som ärver en tidigare. Klassen kan allt som förfadern
kan, men lägger till en ny funktion:
<?php
# inkludera det php program som innehåller den
# klass vi vill ärva
include_once("php3_class2.php");
class EnKlass3 extends EnKlass2
{
# lägger till en ny funktion
function räknaMera( )
{
return $this->klassVariabel + 13 ;
}
}
# skapa objktet
$MinKlass = new EnKlass3() ;
# nedanstående rader kommer att använda basklassens funktioner
echo $MinKlass->räknaLite( 40 ) ;
echo "<br />" ;
$MinAndraKlass = new EnKlass3( 3 ) ;
echo $MinAndraKlass->räknaLite( 40 ) ;
echo "<br />" ;
# Följande funktion finns i EnKlass3, resten är ärvda från EnKlass2
echo $MinAndraKlass->räknaMera( ) ;
?>
Listning 1.19.3 - samples/php3_class3.php
4000 120 16 Resultat av listning 1.19.3
Överlagring (overload)
Man kan även överlagra funktioner. I nedanstående exempel
finns det en kontruerare för klassen. Om så är fallet,
och om man vill att basklassens kontruerare skall köras, så
måste man medvetet köra basklassens kontruerare.
Lägg även märke till att det i nedanstående exempel
finns en räknaMera funktion. Det fanns även en räknaMera
funktione i basklassen (=den klass vi ärvt från), en det
är inte basklassens funktin som körs eftersom vi har gjort
en s.k. överagring av funktionen.
<?php
include_once("php3_class2.php");
class EnKlass4 extends EnKlass2
{
function EnKlass4( $indata = 100 )
{
# gör allt som du vill att denna klasskonstruerare
# skall göra ....
# se sedan till att köra förälderns konstruerare
$this->EnKlass2( $indata );
}
function räknaMera( )
{
return $this->klassVariabel * 122 ;
}
}
$MinKlass = new EnKlass4() ;
echo $MinKlass->räknaLite( 40 ) ;
echo "<br />" ;
$MinAndraKlass = new EnKlass4( 3 ) ;
echo $MinAndraKlass->räknaLite( 40 ) ;
echo "<br />" ;
# Följande funcktion finns i EnKlass3, resten är ärvda från EnKlass2
echo $MinAndraKlass->räknaMera( ) ;
?>
Listning 1.19.4 - samples/php3_class4.php
4000 120 366 Resultat av listning 1.19.4
|