mcdronkz stort zich op OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Willem-Aart

Willem-Aart

16/03/2007 18:40:00
Quote Anchor link
Nou, ik heb me volledig gestort op het leren van OOP. Na in een boek kennis gemaakt te hebben met de basics wil ik nu zelf aan de slag. Voor een simpel eerste script heb ik besloten een simpel gastenboek te schrijven.

Eerst ben ik begonnen een database class te schrijven, waarin ik ongetwijfeld dingen doe die lelijk en vies zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
    }
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }
}

?>


Nu krijg ik sowieso de volgende foutmelding:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.
 
PHP hulp

PHP hulp

06/05/2021 23:01:39
 
Mark Pieper

Mark Pieper

16/03/2007 18:50:00
Quote Anchor link
Je kan dan bijvoorbeeld de class db meegeven aan de constructor van het gastenboek. Bijv:
$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;
}
}
?>
 
Jan Koehoorn

Jan Koehoorn

16/03/2007 18:55:00
Quote Anchor link
Die or die binnen een class is niet echt netjes. Het is netter om een membervariabele $errors aan te maken. In de constructor doe je dan:

$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.
 
Jelle -

Jelle -

17/03/2007 15:18:00
Quote Anchor link
kan je niet met exeptions werken in PHP?
 
Romano

Romano

17/03/2007 16:40:00
Quote Anchor link
Is het niet dat bij je functies doQuery staat en in de pagina $db->query doet ???
 
Jelmer -

Jelmer -

17/03/2007 17:35:00
Quote Anchor link
Helaas is deze klasse niets meer dan een langere naamgeving van de functies die standaard in PHP zitten. M.a.w. hij is nogal nutteloos, hij voegt nog niets toe. Ik zou die while-lus ook in de klasse (misschien zelfs wel in de method doQuery al) verwerken, want die lus is vrij algemeen.

En zoals hierboven al gezegd, $db bestaat niet binnen je method leesBerichtenUitDB ;)
 
Baarr

Baarr

17/03/2007 18:20:00
Quote Anchor link
Ff de vraagjes tussendoor:

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.