mcdronkz stort zich op OOP
Eerst ben ik begonnen een database class te schrijven, waarin ik ongetwijfeld dingen doe die lelijk en vies zijn:
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class MySQL {
protected $location;
protected $username;
protected $password;
protected $dbName;
function ___construct($dbName) {
$this->connectToDB();
$this->selectDB($dbName);
}
function connectToDB ($location = "localhost", $username = "root", $password = "blaat") {
mysql_connect($location, $username, $password) or die(mysql_error());
}
function selectDB ($dbName) {
mysql_select_db($dbName) or die(mysql_error());
}
function doQuery ($query) {
return mysql_query($query);
}
}
?>
class MySQL {
protected $location;
protected $username;
protected $password;
protected $dbName;
function ___construct($dbName) {
$this->connectToDB();
$this->selectDB($dbName);
}
function connectToDB ($location = "localhost", $username = "root", $password = "blaat") {
mysql_connect($location, $username, $password) or die(mysql_error());
}
function selectDB ($dbName) {
mysql_select_db($dbName) or die(mysql_error());
}
function doQuery ($query) {
return mysql_query($query);
}
}
?>
Vraag me niet precies waarom ik bovenaan wat protected variabelen maak, vertel me liever of dat correct is of niet ;-).
Verbinding maken met een database is geen probleem, maar dan probeer ik dus een gastenboek class te schrijven waarin ik berichten ophaal uit de database:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class gastenboek {
function leesBerichtenUitDB () {
$sql = $db->query("SELECT * FROM gastenboek");
$berichten = array();
while($result = mysql_fetch_assoc($sql) {
$berichten[] = $result;
}
return $berichten;
}
}
?>
class gastenboek {
function leesBerichtenUitDB () {
$sql = $db->query("SELECT * FROM gastenboek");
$berichten = array();
while($result = mysql_fetch_assoc($sql) {
$berichten[] = $result;
}
return $berichten;
}
}
?>
Nu krijg ik sowieso de volgende foutmelding:
Code (php)
1
2
3
2
3
Notice: Undefined variable: db in C:\Program Files\Apache Group\Apache2\htdocs\gastenboekOO\gbClass.php on line 4
Fatal error: Call to a member function query() on a non-object in C:\Program Files\Apache Group\Apache2\htdocs\gastenboekOO\gbClass.php on line 4
Fatal error: Call to a member function query() on a non-object in C:\Program Files\Apache Group\Apache2\htdocs\gastenboekOO\gbClass.php on line 4
Ik wil dus vanuit de ene class een method in de andere class aanroepen, maar dit lukt dus niet. Kan iemand me uitleggen wat ik wél moet doen ?
Is mijn opbouw enigzins verantwoord, of programmeer ik nu alsof ik een gigantisch bord voor m'n kop heb ? Let wel, ik kan redelijk procudereel scripten, maar van OOP heb ik absoluut geen kaas gegeten. Ik ben nu nog jong en fris genoeg om het te leren, en m'n PHP skills mogen wel een nieuwe impuls krijgen. Maar hou het aub begrijpelijk zonder met lastige termen te gaan gooien.
$db = new MySQL('db');
$gb = new Guestbook($db);
class gastenboek {
protected db = null
function leesBerichtenUitDB ($db) {
$sql = $this -> db->query("SELECT * FROM gastenboek");
$berichten = array();
while($result = mysql_fetch_assoc($sql) {
$berichten[] = $result;
}
return $berichten;
}
}
?>
$errors = array ();
Zodra er ergens in je class iets fout gaat, doe je:
array_push ($errors, '<p>Kon geen connectie maken met de database</p>');
Om de errors te laten zien, maak je een get_errors functie die gewoon de array $errors retourneert.
kan je niet met exeptions werken in PHP?
Is het niet dat bij je functies doQuery staat en in de pagina $db->query doet ???
En zoals hierboven al gezegd, $db bestaat niet binnen je method leesBerichtenUitDB ;)
Ja, in PHP , zeker in >5.0 kun je gebruik maken van exceptions.
Over die protected variablen:
Je maakt een variabele private wanneer het de bedoeling is dat deze variable van buiten de klasse niet mogen worden aangepast.
Je maakt een variable protected wanneer sub klasses deze variable mogen aanpassen, maar andere klassen niet.(zie private)
En je maakt ze public als ze van buiten de klassen moeten/mogen worden aangepast