Ik ben al een tijdje geregistreerd op dit forum, echter, mijn gegevens zijn niet meer bekend. Heb destijds waarschijnlijk een ander e-mailadres gebruikt, maar dat terzijde.
Ik zit met een vraagje. Ik ben sinds twee weken wat meer bezig met OOP en ik weet nog steeds niet hoe bepaalde dingen het handigst zijn op te lossen.
Mijn vraag:
Ik heb zojuist een database-klasse geschreven (genaamd 'Database') en hier enkele methodes aan toegevoegd. Verbinding maken en queries uitvoeren gaat middels MySQLi, maar dat terzijde. Nu wil ik bedrijfsgegevens ophalen uit de database, dus ik heb een klasse 'Bedrijf' aangemaakt. Hoe kan ik dan het beste de gegevens ophalen? Hieronder mijn code met de twee/drie methodes die mij het beste lijken. Welke raden jullie mij aan voor toekomstig en universeel gebruik? Hieronder dus mijn code:
<?php
class Bedrijf
{
private $bedrijfsid;
public function setBedrijfsID($bedrijfsid)
{
$this->bedrijfsid = (int)$bedrijfsid;
}
public function getBedrijfsID()
{
return $this->bedrijfsid;
}
// Hieronder methode 1
// Één methode voor het ophalen van gegevens en die aanroepen middels een andere methode
// Voordeel: éénmaal lange(re) code voor de query, kan onderaan in de code, zit dus niet in de weg
public function getBedrijfsnaam()
{
return getBedrijfsgegevens('naam');
}
private function getBedrijfsgegevens($kolom)
{
$oDatabase = Database::getInstance();
$result = $oDatabase->setQuery("SELECT ". $kolom ." FROM bedrijf WHERE id = ". $this->bedrijfsid ." LIMIT 0,1");
if ( $oDatabase->countResults($result) == 1 )
{
$fetch = $oDatabase->fetchResults($result);
return (!empty($fetch[$kolom])) ? $fetch[$kolom] : 'onbekend';
}
else
{
return 'onbekend';
}
}
// Hieronder methode 2
// Dus per gegeven een aparte verbinding en methodes
// Voordeel: per waarde is een specifieke output te genereren
public function getBedrijfsnaam()
{
$oDatabase = Database::getInstance();
$result = $oDatabase->setQuery("SELECT naam FROM bedrijf WHERE id = ". $this->bedrijfsid ." LIMIT 0,1");
if ( $oDatabase->countResults($result) == 1 )
{
$fetch = $oDatabase->fetchResults($result);
return (!empty($fetch['naam'])) ? $fetch['naam'] : 'onbekend';
}
else
{
return 'onbekend';
}
}
// Verder zag ik ook een methode 'load()' die alle velden uit de database haalt.
// Deze velden worden in de $this-variabelen gezet middels methodes.
// Dit lijkt me onhandig, want ik hoef niet alles te selecteren als ik enkel de
// bedrijfsnaam wil selecteren. Ongeveer een voorbeeld:
public function load()
{
$oDatabase = Database::getInstance();
$result = $oDatabase->setQuery("SELECT * FROM bedrijf WHERE id = ". $this->bedrijfsid ." LIMIT 0,1");
if ( $oDatabase->countResults($result) == 1 )
{
$fetch = $oDatabase->fetchResults($result);
$this->bedrijfsid = $fetch['id'];
$this->bedrijfsnaam = $fetch['naam'];
// enz.
}
else
{
return 'onbekend';
}
}
public function getBedrijfsnaam()
{
return $this->bedrijfsnaam;
}
}
?>
Alvast bedankt voor het meedenken en voor de tips.
EDIT: de code kan fouten bevatten, is puur een voorbeeld :)