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
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:
- Klassen skall kunna öppna en fil
- Klassen skall kunna söka i filen
- Klassen skall kunna ändra i filen
- Klassen skall kunna lägga till i filen
- Klassen skall kunna ta bort från filen
- Klassen skall kunna skapa en fil från scratch
- 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
|