Ik schrijf vandaag even een zeer compact database framework voor een door mij te ontwikkelen applicatie. Nou heb ik voor elke tabel zegmaar een corresponderende klasse. Die zijn afgeleid van een hoofdobject en bevatten allemaal een array/hashtable met daarin veldwaarden.
Dit werkt uitstekend! Echter, zoals je ziet wil ik in de static load methode een object bouwen aan de hand van een SqlRow object. Ook deze bevat zo'n zelfde constructie met array en accessors maar php wil deze niet gebruiken zodra ik de $row->values["Template"]; aanroep. Zowel private/protected/public maken het onmogelijk om de __get en __set methoden te gebruiken.
Ik begrijp niet waarom het bij de ene situatie wél werkt, en bij een 'externe aanroep' niet.
.
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
| class Page extends Persistent { private $values = array( "changed" => false, "notpersisted" => false, "Id" => "", "ParentId" => "", "PageName" => "", "Template" => ""); public function __get($name) { if (isset($this->values[$name])) { return $this->values[$name]; } else { throw new Exception($name." is not a valid property."); } } public function __set($name, $value) { if (isset($this->values[$name])) { // The given value is different from current value. if ($value != $this->values[$name]) { $this->values[$name] = $value; $this->values["changed"] = true; } } else { throw new Exception($name." is not a valid property."); } } public function __construct() { $this->notpersisted = false; } public static function Load(SqlRow $row) { $object = new Page(); try { $object->values["Id"] = $row->values["Id"]; $object->values["ParentId"] = $row->values["ParentId"]; $object->values["PageName"] = $row->values["PageName"]; $object->values["Template"] = $row->values["Template"]; } catch (Exception $exception) { throw new Exception("SqlRow object " + $row + " does not match destination class '" + "Page" + "'"); } return $object; } } |
Dit werkt uitstekend! Echter, zoals je ziet wil ik in de static load methode een object bouwen aan de hand van een SqlRow object. Ook deze bevat zo'n zelfde constructie met array en accessors maar php wil deze niet gebruiken zodra ik de $row->values["Template"]; aanroep. Zowel private/protected/public maken het onmogelijk om de __get en __set methoden te gebruiken.
Ik begrijp niet waarom het bij de ene situatie wél werkt, en bij een 'externe aanroep' niet.