några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

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

   Börja härIntroduktion