Ik wil graag een constructor in mijn class gebruiken zodat ik met het aanroepen van mijn class het id kan opgeven en dan in de class zelf $this->id kan gebruiken. Maar hoe werkt dit?
Want ik heb nu dit kleine stukje maar $id is dan leeg als ik het echo..
over de __construct valt weinig te zeggen. Het is de functie die aangeroepen wordt als je je class aanroept. De tegenhanger is __destruct. Die functie wordt aangeroepen wanneer het object "stopt".
Wanneer je denkt over het maken van een database class, zou ik toch echt nadenken over het ondersteunen van verschillende database systemen (Oracle, PostgreSQL, MySQL, enz.)
Zo zijn database classen nuttig, als je alleen maar functies als dit gaat maken, dan heeft het echt GEEN nut:
<?php
class ZogenaamdeDBClass
{
private function __construct( $host, $user, $pass, $db ) { } // singelton toepassen, om zo maar 1 connectie met de SQL server te starten. Je hebt er maar een nodig
public function QueryResource( $sQuery )
{
return mysql_query( $sQuery );
}
}
<?php
class ZogenaamdeDBClass
{
privatefunction __construct($host,$user,$pass,$db){}// singelton toepassen, om zo maar 1 connectie met de SQL server te starten. Je hebt er maar een nodig
<?php
class DAL
{
public function SelectDatabase( $sDatabase )
{
// aan hand van database systeem gekozen, moet de juiste class worden geladen
}
// enz.
}
<?php
class DAL
{
publicfunction SelectDatabase($sDatabase)
{
// aan hand van database systeem gekozen, moet de juiste class worden geladen
}
// enz.
}
Dit is dan een voorbeeld van een nuttige database class.
// een error class/functie aanroepen, want query is mislukt
}
else
{
return$QueryResult;
}
}
}
Dit is natuurlijk bedoelt als je later van plan bent om een andere database te gebruiken, of als je misschien nadenkt om over te stappen naar een andere host (die dan misschien een andere database server heeft).
Het is eigelijk altijd slim om een DAL te maken, maar niet als het gaat om een gastenboekje ofzo. Bij grote systemen dus.
Denk dus na voordat je zoiets gaat maken, het zal wat tijd kosten.
Wat ik eerder zou doen is het gebruiken van PDO als je toch met php5 bezig bent. Heb je lekker brede ondersteuning van database types, en als je dan ook nog eens de prepared statements gebruikt, zijn SQL injections zo goed als onmogelijk.
Het blijft nog steeds onlogisch hoor. Je werkt toch op één database type: mysql, oracle, dbase,.... Zelfs het switchen tussen meerdere databases vind ik al weird. Je moet al echt een grote website hebben (grote website is GB's per dag aan data ophalen/updaten/...) om zoiets te doen.
jullie hebben gelijk, het is onlogisch om op 1 pagina te switchen tussen databases.
Maar stel je eens dit voor:
Je hebt een website dat alles regelt via de index om zo mooie* URLs te krijgen. Ik heb dat nu, dus start ik me database connectie in de index, zodat ik het overal kan gebruiken en niet telkens een connectie hoef te maken.
Nu is er data van een andere database, die je maar op 1 pagina hoeft te gebruiken. Met behulp van die methode kun je toch switchen tussen databases zonder dat je een nieuw object hoeft aan te maken
Nu lijkt dit onwaarschijnlijk, maar ik heb het wel gezien waarin dit gebeurd
@siliecom14: Ik zou dan nog steeds niet gaan switchen, ik zou toch een nieuw object aanmaken. Anders zou ik mischien wel 3 keer naar de database moeten connecten.
@siliecom14: als je zoiets gezien hebt moet dat dan wel een slechte site zijn geweest je kan namelijk een nieuwe tabel maken in dezelfde database.... en daar kan je bijna oneindig records in opslaan.
@mesynthetix
Opnieuw met mysql connecten is eigenlijk niet nodig. Het lijkt me onwaarschijnlijk dat mysql en oracle dezelfde "link identifier" hebben die door de war zou lopen.
Als je om beurten met verschillende mysql servers moet werken kan zoiets veel parsetime besparen:
<?php
$DB = new DAL( 'MYSQL' );
$DB->Query( "....." );
$DB->ChangeDatabase( 'Oracle' );
$DB->Query( "....." );
// hier voeg ik even iets aan toe
$DB->ChangeDatabase('MYSQL');
$DB->Query(".....");
<?php
$DB=new DAL('MYSQL');
$DB->Query(".....");
$DB->ChangeDatabase('Oracle');
$DB->Query(".....");
// hier voeg ik even iets aan toe
$DB->ChangeDatabase('MYSQL');
$DB->Query(".....");
Hierbij wordt de ChangeDatabase code eingenlijk toch 3 keer uitgevoerd, of heb ik dat? Waarschijnlijk zit in die functie een reconnect, dus wordt het wel 3 keer uitgevoerd ;).