Ik maak tegenwoordig meestal twee klassen om dit probleem op te lossen. De eerste stelt het daadwerkelijke object voor, een user, product whatever. De tweede is een collection klasse die een aantal methoden bevat om een groep objecten te creëren op basis van database gegevens, en een generieke methode om ze uit te lezen (voorbeeld volgt).
In zo'n methode om gegevens op te halen kun je er voor kiezen om slechts een deel van de mogelijke properties van de objecten te zetten. Zolang je daar in de verdere implementatie rekening mee kunt houden levert dat geen problemen op.
Anyway, iets van 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| <?php
class example {
var $id;
var $helpText;
function show() {
echo $this->helpText;
}
}
class exampleCollection {
var $DB;
var $examples = array();
//__construct
function exampleCollection() {
$this->DB = DB::getInstance();
}
// fetches all examples from the database that are
// relevant for the specified context
function loadExamplesByContextId($contextId) {
$sql = sprintf('
SELECT `exampleid`, `helptext`
FROM `examples`
WHERE `contextid` = %d',
$contextId);
if ($this->DB->query($sql)) {
while($row = $this->DB->fetchRow()) {
$example = new example();
$example->id = $row['exampleid'];
$example->helpText = $row['helptext'];
array_push($this->examples, $example);
}
return TRUE;
}
$error = new error(mysql_error());
$error->doSomething();
return FALSE;
}
// iterates over the examples contained in the collection
// returning an example each time it is called. Returns
// false at the end of the collection
function fetchExample() {
static $i = 0;
if (isset($this->examples[$i])) {
return $this->examples[$i++];
} else {
$i = 0;
return FALSE;
}
}
} |