Hi,
Ik ben bezig met OO in PHP5 en loop tegen het volgende aan. Ik heb een abstracte klasse Dataclass die door dataclasses worden ge-extend. Nu heb ik de __get en __set in de dataclass geset en in sommige gevallen hebben child klassen een eigen __get een __set. Klopt het dat ik niet zomaar parent::__get aan kan roepen om algemene variabelen te verkrijgen? Zijn de variabelen uit de child klasse niet bekend in de scope van de parent klasse?
Hier mijn code:
Ik ben bezig met OO in PHP5 en loop tegen het volgende aan. Ik heb een abstracte klasse Dataclass die door dataclasses worden ge-extend. Nu heb ik de __get en __set in de dataclass geset en in sommige gevallen hebben child klassen een eigen __get een __set. Klopt het dat ik niet zomaar parent::__get aan kan roepen om algemene variabelen te verkrijgen? Zijn de variabelen uit de child klasse niet bekend in de scope van de parent klasse?
Hier mijn 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
| <?php class Bestelling extends Dataclass { private $id; /* een lading variabelen en een __constructor */ public function __get($name) { if($name == 'materiaaloptie' && !isset($this->materiaaloptie)) { $this->materiaaloptie = new Materiaaloptie($this->materiaaloptieId, array(), $this->id); return $this->materiaaloptie; } else if($name == 'materiaaloptie') { return $this->materiaaloptie; } else if($name == 'gebruiker' && !isset($this->gebruiker)) { $this->gebruiker = new Gebruiker($this->gebruikerId); return $this->gebruiker; } else if($name == 'gebruiker') { return $this->gebruiker; } else { return parent::__get($name); } } } ?> |
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
| <?php abstract class Dataclass { public function __set($name, $value) { $this->$name = $value; } public function __get($name) { if(!isset($this->$name)) { $trace = debug_backtrace(); throw new Exception('Undefined property via __get(): '.$name.' in '.$trace[0]['file'].' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } else { return $this->$name; } } } ?> |