OOP en lussen
Voldemort:
Ik bedoel dat je de data binnen je object dan niet meer kan bewerken... stel je voor dat je een functie hebt die wat data retourneerd, in de vorm van een stuk opgemaakte tekst...@Pim Vernooij: Hoe bedoel je ik kan het niet meer bewerken? Ik kan toch gewoon alles in m'n class bewerken, daar kan ik toch ook de opmaak kiezen?
wat nou als je deze data opnieuw wilt gebruiken, in een hele andere context? de oplossing daarvoor is de functie gewoon een array te laten retourneren, en achteraf op te maken :)
"php en opmaak dienen gescheiden te blijven"... of zoiets :-P
Gewijzigd op 17/02/2006 00:57:00 door Pim Vernooij
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
class NewsIndex
{
// Constructor
function NewsIndex()
{
// Geen handelingen nodig
}
function getLast($aantal) // Gezien de naam verwacht ik dat je de laatste $aantal nieuwsitems wilt
{
$items = array();
// Je query voor de laatste 10 records (ik ga d'r maar van uit dat die klopt m.b.t. je tabellenstructuur.
$query = "SELECT n.*, l.gebruikersnaam FROM nieuws n LEFT JOIN leden l ON (n.door = l.id) LIMIT " . $aantal;
// Ik weet niet wat voor databaseclass je gebruikt, dus ik gebruik maar ff de default functies
$result = mysql_query($query);
// Kopieer rijen naar array
while($items[] = mysql_fetch_array($result, MYSQL_ASSOC));
// 'wis' resultaat uit geheugen
mysql_free_result($result);
// Geef de array terug
return $items;
}
}
// Maak verbinding met de database
mysql_connect("localhost", "username", "password") or die("Kan geen verbinding maken: " . mysql_error());
mysql_select_db("databasename");
// Maak een nieuw object van de class NewsIndex
$ni = new NewsIndex();
// Zoek de 20 laatste nieuwsitems op
$items = $ni->getLast(20);
// Geef ze alle 20 weer op 't scherm
for($i = 0; $i < sizeof($items); $i++)
{
// Ik heb maar wat lukraak velden bedacht voor het printen.. maar 'k hoop dat de bedoeling duidelijk is
print("<p>Het volgende bericht is gepost op " . htmlentities($items["datum"]) . " om " . htmlentities($items["tijd"]) . " door " . htmlentities($items["gebruikersnaam"]) . "<br /><br />" . htmlentities($items["omschrijving"]) . "</p>");
}
?>
class NewsIndex
{
// Constructor
function NewsIndex()
{
// Geen handelingen nodig
}
function getLast($aantal) // Gezien de naam verwacht ik dat je de laatste $aantal nieuwsitems wilt
{
$items = array();
// Je query voor de laatste 10 records (ik ga d'r maar van uit dat die klopt m.b.t. je tabellenstructuur.
$query = "SELECT n.*, l.gebruikersnaam FROM nieuws n LEFT JOIN leden l ON (n.door = l.id) LIMIT " . $aantal;
// Ik weet niet wat voor databaseclass je gebruikt, dus ik gebruik maar ff de default functies
$result = mysql_query($query);
// Kopieer rijen naar array
while($items[] = mysql_fetch_array($result, MYSQL_ASSOC));
// 'wis' resultaat uit geheugen
mysql_free_result($result);
// Geef de array terug
return $items;
}
}
// Maak verbinding met de database
mysql_connect("localhost", "username", "password") or die("Kan geen verbinding maken: " . mysql_error());
mysql_select_db("databasename");
// Maak een nieuw object van de class NewsIndex
$ni = new NewsIndex();
// Zoek de 20 laatste nieuwsitems op
$items = $ni->getLast(20);
// Geef ze alle 20 weer op 't scherm
for($i = 0; $i < sizeof($items); $i++)
{
// Ik heb maar wat lukraak velden bedacht voor het printen.. maar 'k hoop dat de bedoeling duidelijk is
print("<p>Het volgende bericht is gepost op " . htmlentities($items["datum"]) . " om " . htmlentities($items["tijd"]) . " door " . htmlentities($items["gebruikersnaam"]) . "<br /><br />" . htmlentities($items["omschrijving"]) . "</p>");
}
?>
$db->query("SELECT * FRPM table");
Alleen krijg ik dan dit, exact op die lijn:
Fatal error: Call to a member function on a non-object in [...] on line [zie boven]
Hoe komt dat? Wat doe ik eraan?
Code (php)
Zo los je dat op :)
Kan ik niet die $db blijven gebruiken? Ik heb die class namelijk al eens met new gedaan in de config. En zo is het erg onhandig, dan moet dat in elke class :s.
De error is eruit door global $db; te gebruiken bij m'n functie.