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.1 Ett exempel på klass

För att förstå klasser bättre så skapar vi en klass för filhantering. Många av oss är säkert vana med att hantera enklare databaser och klassen skall i praktiken hantera filen som en databas

Börja med att skapa en exempelfil

Filen skall innefålla "fältnamnen" på första raden samt några testrader. Mellan varje fält skall det sättas en tabulator. Se nedanstående exempel:

ID    Namn    Adress    Ålder
1    Kalle    Hemma    22
2    Ville    Borta    92
3    Lena    Mellan    19
Listning 1.19.1.1 - samples/databas.txt
[Visa i separat fönster]

Denna fil måste vara skrivbar!

Skapa en klass för filhanteringen

Vi börjar med en enkel klass. Även om jag inte betonar detta i mina exempel, så fungerar det utmärkt att planera klassen med hjälp av någon formell metod, t.ex. UML. I detta fall konstaterar vi bara att:

  1. Klassen skall kunna öppna en fil
  2. Klassen skall kunna söka i filen
  3. Klassen skall kunna ändra i filen
  4. Klassen skall kunna lägga till i filen
  5. Klassen skall kunna ta bort från filen
  6. Klassen skall kunna skapa en fil från scratch
  7. Klassen skall kunna radera en fil

<?php
class db_fil
{
    var
$databasen;
    var
$fältnamnen;
    var
$nuvarande_post;
    
# constructor - kan ta ett filnamn
    
function db_fil( $fil = "" )
    {
        if (
$fil != "" )
        {
            
$datat = file( $fil );
            
$this->sök_fram_allt_data( $datat );
        }
    }
    
    function
sök_fram_allt_data( $datat )
    {
        
$this->fältnamnen = explode( "\t", $datat[0] );
        foreach(
$this->fältnamnen as $index=>$fält )
            
$this->fältnamnen[$index] = Trim($this->fältnamnen[$index]);

        
array_splice( $datat, 0, 1);
        foreach(
$datat as $raden )
        {
            
$fälten = explode( "\t", $raden );
            
$id = $fälten[0];
            foreach(
$this->fältnamnen as $index=>$fält )
            {
                
$denna_rad[$fält] = $fälten[$index];
            }
            
$this->databasen[] = $denna_rad;
        }
        
$this->nuvarande_post = 0;
    }
    function
debug_print()
    {
        echo
"<pre>";
        
print_r($this->databasen);
        echo
"</pre>";
    }
    function
nästa(  )
    {
        if (
$this->nuvarande_post < count($this->databasen) - 1 )
        {
            
$this->nuvarande_post++;
            return
true;
        }
        else
        {
            return
false;
        }
    }
    function
föregående(  )
    {
        if (
$this->nuvarande_post > 0 )
        {
            
$this->nuvarande_post--;
            return
true;            
        }
        else
        {
            return
false;
        }
    }
    function
första(  )
    {
        
$this->nuvarande_post = 0;
    }
    function
sista(  )
    {
        
$this->nuvarande_post = count($this->databasen) -1 ;
    }
    function
fältvärde( $vilket )
    {
        return
$this->databasen[ $this->nuvarande_post ][ $vilket ];
    }
    function
sök( $fält, $värde )
    {
        foreach(
$this->databasen as $index=>$innehåll)
        {
            if (
trim($innehåll[ $fält ]) == trim( $värde ) )
            {
                
$this->nuvarande_post = $index;
                return
true;
            }
        }
        return
false;
    }
    function
ändra( $fält, $värde )
    {
        
$this->databasen[ $this->nuvarande_post ][ $fält ] = $värde;
    }
    function
radera(  )
    {
        
array_splice( $this->databasen, $this->nuvarande_post, 1);
        if (
$this->nuvarande_post > 0 )
            
$this->nuvarande_post--;
    }

}

$minfil = new db_fil( "databas.txt" );
do{
    echo
$minfil->fältvärde("Namn");
    echo
" ";
    echo
$minfil->fältvärde("Adress");
    echo
" ";
    echo
$minfil->fältvärde("Ålder");
    echo
"<br>";
}while (
$minfil->nästa() );

if (
$minfil->sök("ID", 2 ) )
{
    echo
$minfil->fältvärde("Namn");
}
else
{
    echo
"Hitta int";
}
$minfil->debug_print();
$minfil->radera();
$minfil->debug_print();
?>
Listning 1.19.1.2 - samples/db_fil1.php

Kalle Hemma 22
Ville Borta 92
Lena Mellan 19
Ville
Array
(
    [0] => Array
        (
            [ID] => 1
            [Namn] => Kalle
            [Adress] => Hemma
            [Ålder] => 22

        )

    [1] => Array
        (
            [ID] => 2
            [Namn] => Ville
            [Adress] => Borta
            [Ålder] => 92

        )

    [2] => Array
        (
            [ID] => 3
            [Namn] => Lena
            [Adress] => Mellan
            [Ålder] => 19

        )

)
Array
(
    [0] => Array
        (
            [ID] => 1
            [Namn] => Kalle
            [Adress] => Hemma
            [Ålder] => 22

        )

    [1] => Array
        (
            [ID] => 3
            [Namn] => Lena
            [Adress] => Mellan
            [Ålder] => 19

        )

)
Resultat av listning 1.19.1.2

 

   Börja härIntroduktionEtt exempel på klass