sarnath
Legacy Member
Ik maak nu al een tijdje gebruik van de objectgeoriënteerde manier van werken met mysqli om mijn data af te handelen.
Nu zou ik echter een stap verder willen gaan en met classes gaan werken gezien ik totnutoe altijd vooral proceduraal gewerkt heb.
Ik heb al heel wat opzoekwerk gedaan op google, maar ik vind verbazend weinig echt nuttige zaken terug behalve misschien deze:WebmasterCity - Scripts - OOP Gastenboek
echter heb ik een paar opmerkingen over dit script, er wordt bijvoorbeeld een database adapter in de class Reactie gestoken terwijl dit volgens mij beter gescheiden gehouden wordt?
Daarnaast wordt dan daarom een reactie opgeslagen op volgende manier: $reactie->opslaan() terwijl het mij logischer lijkt dat je een object aan je dataklasse doorgeeft en deze gebruikt om je gegevens op te slaan, dus in de aard van $dataReacties = new DataReacties();
$dataReacties.insertRectie($reactie);
Ik heb daarom eens een scriptje uitgewerkt waarbij ik gebruik maak van aparte objecten, dataclasses en een mysqli connectie klasse waarop ik graag wil verderbouwen, maar ik had er graag eens jullie mening over gehad of mijn werkwijze correct is (het werkt in ieder geval
)
uitvoeren:
Nu zou ik echter een stap verder willen gaan en met classes gaan werken gezien ik totnutoe altijd vooral proceduraal gewerkt heb.
Ik heb al heel wat opzoekwerk gedaan op google, maar ik vind verbazend weinig echt nuttige zaken terug behalve misschien deze:WebmasterCity - Scripts - OOP Gastenboek
echter heb ik een paar opmerkingen over dit script, er wordt bijvoorbeeld een database adapter in de class Reactie gestoken terwijl dit volgens mij beter gescheiden gehouden wordt?
Daarnaast wordt dan daarom een reactie opgeslagen op volgende manier: $reactie->opslaan() terwijl het mij logischer lijkt dat je een object aan je dataklasse doorgeeft en deze gebruikt om je gegevens op te slaan, dus in de aard van $dataReacties = new DataReacties();
$dataReacties.insertRectie($reactie);
Ik heb daarom eens een scriptje uitgewerkt waarbij ik gebruik maak van aparte objecten, dataclasses en een mysqli connectie klasse waarop ik graag wil verderbouwen, maar ik had er graag eens jullie mening over gehad of mijn werkwijze correct is (het werkt in ieder geval
)
Code:
<?php
class Database{
private $connection;
public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam){
//connectie maken
$this->connection = new mysqli($host,$gebruikersnaam,$wachtwoord,$naam);
if (mysqli_connect_errno()) {
printf("Kan niet connecteren met MySQL Server. Errorcode: %s <br />", mysqli_connect_error());
exit;
}
//encoding op UTF-8 zetten
$this->connection->query("SET NAMES 'utf8'");
}
public function get_connection(){
return $this->connection;
}
public function sluit_verbinding(){
$connection->close();
}
}
?>
Code:
<?php
class DataNieuws{
private $database;
public function __construct(Database $database)
{
$this->database = $database;
}
public function nieuws_toevoegen(Nieuwsbericht $nieuwsbericht)
{
$query_insert_nieuws = "insert into nieuws(titel,bericht,datum,gebruiker) values(?,?,?,?)";
if ($stmt = $this->database->get_connection()->prepare($query_insert_nieuws)) {
$stmt->bind_param('ssss',$nieuwsbericht->titel,$nieuwsbericht->bericht,$nieuwsbericht->datum,$nieuwsbericht->gebruikersnaam);
$stmt->execute();
$stmt->store_result();
if(!($stmt->affected_rows == 1)){
echo "Er heeft zich een fout voorgedaan bij het toevoegen van het nieuwsbericht : " . $stmt->error . "<br /><br />";
}else{
echo "opgeslagen.<br /><br />";
}
$stmt->close();
}else{
echo "Er heeft zich een fout voorgedaan bij het toevoegen van het product : " . $stmt->error . "<br /><br />";
}
}
public function get_nieuwsbericht($id){
$query = "select titel,bericht,datum,gebruiker from nieuws where nieuwsID = ?";
if ($stmt = $this->database->get_connection()->prepare($query)) {
$stmt->bind_param('i',$id);
$stmt->execute();
$stmt->bind_result($titel,$bericht,$datum,$gebruikersnaam);
$stmt->store_result();
$stmt->fetch();
if(($stmt->num_rows) == 1){
return new Nieuwsbericht($titel,$bericht,$datum,$gebruikersnaam);
}else{
echo 'Het nieuwsbericht werd niet teruggevonden.';
}
$stmt->close();
}else{
echo "Er heeft zich een fout voorgedaan bij het toevoegen van het product : " . $stmt->error . "<br /><br />";
}
}
public function get_nieuwsberichten($aantal){
$query = "select titel,bericht,datum,gebruiker from nieuws order by datum desc LIMIT ?";
if ($stmt = $this->database->get_connection()->prepare($query)) {
$stmt->bind_param('i',$aantal);
$stmt->execute();
$stmt->bind_result($titel,$bericht,$datum,$gebruikersnaam);
$stmt->store_result();
if(($stmt->num_rows) > 0){
while ($stmt->fetch()) {
$nieuwsberichten = new Nieuwsbericht($titel,$bericht,$datum,$gebruikersnaam);
}
return $nieuwsberichten;
}
$stmt->close();
}else{
echo "Er heeft zich een fout voorgedaan bij het ophalen van de nieuwsberichten : " . $stmt->error . "<br /><br />";
}
}
}
?>
Code:
<?php
class Nieuwsbericht{
public $titel;
public $bericht;
public $datum;
public $gebruikersnaam;
//constructor
public function __construct($titel,$bericht,$datum,$gebruikersnaam,$datanieuws=""){
$this->titel = $titel;
$this->bericht = $bericht;
$this->datum = $datum;
$this->gebruikersnaam = $gebruikersnaam;
$this->datanieuws = $datanieuws;
return;
}
//titel
public function setTitel($titel){
$this->$titel = $titel;
return;
}
public function getTitel(){
return $this->titel;
}
//bericht
public function setBericht($bericht){
$this->$bericht = $bericht;
return;
}
public function getBericht(){
return $this->bericht;
}
//datum
public function setDatum($datum){
$this->$datum = $datum;
return;
}
public function getDatum(){
return $this->datum;
}
//gebruikersnaam
public function setGebruikersnaam($gebruikersnaam){
$this->$gebruikersnaam = $gebruikersnaam;
return;
}
public function getGebruikersnaam(){
return $this->gebruikersnaam;
}
}
?>
uitvoeren:
Code:
<?php
//classes importeren
require_once("Database.php");
require_once("DataNieuws.php");
require_once("Nieuwsbericht.php");
//opslaan
$db = new Database();
$db->maak_verbinding('localhost', 'user', 'pass', 'dbname');
$dataNieuws = new DataNieuws($db);
$nieuwsbericht = new Nieuwsbericht("test","testbericht","2010-10-01","testgebruiker");
$dataNieuws->nieuws_toevoegen($nieuwsbericht);
//tonen
$db = new Database();
$db->maak_verbinding('localhost', 'root', 'bartbart', 'testclasses');
$dataNieuws = new DataNieuws($db);
$nieuwsbericht = $dataNieuws->get_nieuwsbericht(1);
echo $nieuwsbericht->titel;
?>
