Ik worstel hier al een tijdje mee, maar weet nog niet echt een oplossing. Meestal bouw ik er wat omheen, maar ik wil nu wel een betere oplossing weten.
De situatie is als volgt:
• ik weet 'nul komma weinig' van PHP
• ik ken basis OOP en gebruik dat wel binnen Delphi
• ik zoek een mooie oplossing
Sterk vereenvoudigd voorbeeld van de zoekmachine die ik voor intern gebruik maak:
Voorbeeld:
Nu ga ik hierin zoeken middels:
Hieruit krijg je dus een tabel als:
Om deze items juist op het scherm te krijgen heb ik het volgende basis object:
Met 4 afgeleidde objecten, waar de getOmschrijving functie zo is ingevuld dat deze de informatie uit de database haalt.
Om de items op het scherm zetten wil ik allemaal toepasselijke objecten maken. En daar zit nu juist mijn probleem. Mijn script moet zich bewust zijn van alle type objecten. Dat los ik nu op m.b.v. een extra functie:
Maar... dit wil ik dus niet. Ik zou willen dat mijn basisobject bekend is met zijn eigen afgeleidde objecten. En zodra het basisobject wordt aangemaakt hij een afgeleidde teruggeeft.
Dus dat ik kan doen:
en dat het type dat terugkomt afhankelijk is van de waarde van $Tabel.
Hoe doe ik dit?
De situatie is als volgt:
• ik weet 'nul komma weinig' van PHP
• ik ken basis OOP en gebruik dat wel binnen Delphi
• ik zoek een mooie oplossing
Sterk vereenvoudigd voorbeeld van de zoekmachine die ik voor intern gebruik maak:
Voorbeeld:
SQL:
1
2
3
4
5
6
7
8
| CREATE VIEW voorbeeldview as SELECT 'P' as Type, ID, Naam FROM printers UNION SELECT 'C' as Type, ID, Naam FROM computers UNION SELECT 'U' as Type, ID, Naam FROM users UNION SELECT 'G' as Type, ID, Naam FROM groups |
Nu ga ik hierin zoeken middels:
SQL:
1
| SELECT Type, ID, Naam FROM voorbeeldview WHERE Naam like '%A%' ORDER BY Naam |
Hieruit krijg je dus een tabel als:
Type | ID | Naam |
G | 3 | AAAA |
C | 7 | BAAAAdf |
U | 2 | Cdfasd |
G | 1 | Dfdgsdfa |
P | 5 | Egcsda |
Om deze items juist op het scherm te krijgen heb ik het volgende basis object:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| class ZoekItem { protected $tabel; protected $keyid; protected $naam; protected $omschrijving; function __CONSTRUCT($Tabel, $KeyID, $Naam){ $this->tabel=$Tabel; $this->keyid=$KeyID; $this->naam=$Naam; $this->omschrijving=''; } function getOmschrijving(){ return ''; } function ItemToStr(){ return "KORT:".$this->naam."<BR>".$this->getOmschrijving(); } } |
Met 4 afgeleidde objecten, waar de getOmschrijving functie zo is ingevuld dat deze de informatie uit de database haalt.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| class UserItem extends ZoekItem { function getOmschrijving(){ if ($this->omschrijving=="") { /* Haal info uit database en zet deze in $this->omschrijving */ } return $this->omschrijving; } } class ComputerItem extends ZoekItem { function getOmschrijving(){ if ($this->omschrijving=="") { /* Haal info uit database en zet deze in $this->omschrijving */ } return $this->omschrijving; } } enz... |
Om de items op het scherm zetten wil ik allemaal toepasselijke objecten maken. En daar zit nu juist mijn probleem. Mijn script moet zich bewust zijn van alle type objecten. Dat los ik nu op m.b.v. een extra functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| function CreateZoekItem($Tabel, $KeyID, $Naam){ switch($Tabel){ case "U"; return new UserItem($Tabel, $KeyID, $Naam); break; case "C"; return new ComputerItem($Tabel, $KeyID, $Naam); break; case "G"; return new GroepItem($Tabel, $KeyID, $Naam); break; case "P"; return new PrinterItem($Tabel, $KeyID, $Naam); break; default: return new ZoekItem($Tabel, $KeyID, $Naam); } } |
Maar... dit wil ik dus niet. Ik zou willen dat mijn basisobject bekend is met zijn eigen afgeleidde objecten. En zodra het basisobject wordt aangemaakt hij een afgeleidde teruggeeft.
Dus dat ik kan doen:
PHP:
1
| $item=new ZoekItem($Tabel, $KeyID, $Naam); |
en dat het type dat terugkomt afhankelijk is van de waarde van $Tabel.
Hoe doe ik dit?
[ Voor 5% gewijzigd door jvdmeer op 22-03-2006 19:48 ]