Object uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicoow Unknown

Nicoow Unknown

15/09/2009 19:18:00
Quote Anchor link
Hallo mensen,

Ik zit momenteel met een klein complex dingetje, waar ik niet geheel uitkom.
(alle komende namen zijn verzinsel om het gewoon duidelijk te maken).

Ik heb een adminstratie paneel, waarin je beestjes kan aanmaken.
Deze beestjes propt hij dan in de database.
Maar deze beestjes zijn ook een object.
ze erven allemaal van het object beestjes.

Nu heb ik bijvoorbeeld 5 type beestjes
-LoopBeestje
-VliegBeestje
-ZwemBeestje
-AmfibischBeestje (zwemt en loopt)
-ImfobischBeestje (zwemt en vliegt)

Nu wil ik dus, dat vanuit mijn database het juiste object woord aangemaakt, maar hoe kan ik dit nu het beste doen?
Moet ik bij aanmaak de objecten serializen (geeft een leraar als optie) of deze gewoon opslaan, met een type id, en aan de hand daarvan het object aanmaken?

Heeft iemand een slim idee, of een nog genialer ingeving?
 
PHP hulp

PHP hulp

07/12/2021 22:38:39
 
Bo az

Bo az

15/09/2009 19:28:00
Quote Anchor link
Ik weet niet precies of het is wat je bedoeld, maar in het principe zijn er twee manieren om over erving in een database te modelleren.

1. Voor ieder type een eigen tabel en eventueel de nodige tabellen voor abstracte typen (ik kan me voorstellen dat jij een abstacte klasse 'beestje' hebt.) Dit is het makkelijkste te herkennen in de database maar lastiger te implementeren omdat deze verschillende tabellen maar 1 'gedeeltede' primary key mogen hebben, of te wel, alle andere primary key's zijn meteen ook foreign key's naar de primary key van de basis tabel. Je hebt dus transacties nodig om te zorgen dat je database klopt.

2. Een tabel met voor iedere eigenschap van alle beestjes een kolom. Je zou nu het type moeten kunnen herkennen, een 'vliegbeestje' is bijvoorbeeld de enige die geen NULL in de kolom 'vleugels' heeft staan. Om de typen wat duidelijker aan te duiden kan je ook een kolom toevoegen die het type aanduid, maar dat is niet perse nodig.

Edit Zie net dat mijn voorbeeld met vleugels niet helemaal opgaat, maar het gaat om het idee, ik hoop dat het duidelijk is.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Nicoow Unknown

Nicoow Unknown

15/09/2009 20:35:00
Quote Anchor link
Ik denk toch dat ik voor de serialize ga,
Ik heb net even lopen testen, en het werkt echt heel mooi, vind ik zelf.

ik heb de volgende code uitgevoerd,
(ik weet, lelijk en onoverzichtelijk, maar het is alleen voor het testen)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
class animall {

    private $name;
    private $age;
    public $owner;
    public $sound;

    function
__construct($in_name="unnamed",$in_age="0",$in_owner="unknown") {
        $this->name = $in_name;
        $this->age = $in_age;
        $this->owner = $in_owner;
    }

    function
getage() {
        return ($this->age * 365);
    }
  
    function
getowner() {
        return ($this->owner);
    }
  
    function
getname() {
        return ($this->name);
    }
}

class dog extends animall
{
    function
__construct($in_name="unnamed",$in_age="0",$in_owner="unknown") {
        $this->name = $in_name;
        $this->age = $in_age;
        $this->owner = $in_owner;
        $this->sound = "Bark!";
    }
    
}

class cat extends animall
{
    function
__construct($in_name="unnamed",$in_age="0",$in_owner="unknown") {
        $this->name = $in_name;
        $this->age = $in_age;
        $this->owner = $in_owner;
        $this->sound = "Miaouw!";
    }
}


/**
* The Animall
*/

$animall = new animall("Rover",12,"Lisa and Graham");
$petS = serialize($animall);
$pet = unserialize($petS);

echo '<h1>The Animall</h1>';
echo 'Real Object:<br />';
print_r($animall);
echo '<br /><br />Serialized Object:<br />';
print $petS;
echo '<br /><br />Unserialize Object:<br />';
print_r($pet);
/**
* The Dog
*/

$dog = new dog("Rover",12,"Lisa and Graham");
$petS = serialize($dog);
$pet = unserialize($petS);

echo '<h1>The Dog</h1>';
echo 'Real Object:<br />';
print_r($dog);
echo '<br /><br />Serialized Object:<br />';
print $petS;
echo '<br /><br />Unserialize Object:<br />';
print_r($pet);


/**
* The Cat
*/

$cat = new cat("Rover",12,"Lisa and Graham");
$petS = serialize($cat);
$pet = unserialize($petS);

echo '<h1>The Cat</h1>';
echo 'Real Object:<br />';
print_r($cat);
echo '<br /><br />Serialized Object:<br />';
print $petS;
echo '<br /><br />Unserialize Object:<br />';
print_r($pet);
?>


en dan is dit het resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
The Animall
Real Object:
animall Object ( [name:private] => Rover [age:private] => 12 [owner] => Lisa and Graham [sound] => )

Serialized Object:
O:7:"animall":4:{s:13:"&#65533;animall&#65533;name";s:5:"Rover";s:12:"&#65533;animall&#65533;age";i:12;s:5:"owner";s:15:"Lisa and Graham";s:5:"sound";N;}

Unserialize Object:
animall Object ( [name:private] => Rover [age:private] => 12 [owner] => Lisa and Graham [sound] => )
The Dog
Real Object:
dog Object ( [name:private] => [age:private] => [owner] => Lisa and Graham [sound] => Bark! [name] => Rover [age] => 12 )

Serialized Object:
O:3:"dog":6:{s:13:"&#65533;animall&#65533;name";N;s:12:"&#65533;animall&#65533;age";N;s:5:"owner";s:15:"Lisa and Graham";s:5:"sound";s:5:"Bark!";s:4:"name";s:5:"Rover";s:3:"age";i:12;}

Unserialize Object:
dog Object ( [name:private] => [age:private] => [owner] => Lisa and Graham [sound] => Bark! [name] => Rover [age] => 12 )
The Cat
Real Object:
cat Object ( [name:private] => [age:private] => [owner] => Lisa and Graham [sound] => Miaouw! [name] => Rover [age] => 12 )

Serialized Object:
O:3:"cat":6:{s:13:"&#65533;animall&#65533;name";N;s:12:"&#65533;animall&#65533;age";N;s:5:"owner";s:15:"Lisa and Graham";s:5:"sound";s:7:"Miaouw!";s:4:"name";s:5:"Rover";s:3:"age";i:12;}

Unserialize Object:
cat Object ( [name:private] => [age:private] => [owner] => Lisa and Graham [sound] => Miaouw! [name] => Rover [age] => 12 )


Ordeel zelf maar, volgens mij werkt dit veel makkelijker en sneller
 
Jelmer -

Jelmer -

15/09/2009 20:41:00
Quote Anchor link
Enige nadeel is dat je de class-definities niet te veel meer kan veranderen wanneer ze eenmaal in de database zitten, en dat je de database niet kan laten zoeken of sorteren op de eigenschappen van het object.
 
Nicoow Unknown

Nicoow Unknown

15/09/2009 21:38:00
Quote Anchor link
Daar heb ik nog niet over nagedacht,,
Opzich moet het ook niet al te veel uitmaken, omdat dit alleen voor die beestjes (of in mijn geval monsters) gebruikt gaat worden.
En ik kan altijd nog alle gegevens in een database gooien, en dan een extra veld dat object heet o.i.d., dan kan ik wel gewoon sorteren op iets, en dan selecteer ik alleen het object.
Dan moet ik alleen een (slimme) functie maken die ontbrekende gegevens bijwerkt.
Ik zie nu dat als het object niet compleet is, dat hij dan een catchable fatal error geeft.
Ik ga eens even kijken of ik iets werkends krijg,
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.