Goeiemiddag,
Ik ben bezig met een scriptje, en nu loop ik tegen een probleem aan. Ik heb een abstracte klasse (we noemen hem even klasse A) waarin ik een property declareer maar nog geen waarde geef. Ik extend die klasse A met klasse B, waarin ik de variabele wel een waarde geef. Naast die property, heeft de klasse A ook nog een constructor. Deze is niet abstract, en maakt gebruik van de static property.
Een beetje pseudo-code om het te verduidelijken:
In dit geval wil ik dat de uitkomst hiervan is: "Hello World", dit is niet het geval. Ik vermoed dat dit komt doordat er als het ware twee "versies" zijn van de property $var. Die van klasse A, en die van klasse B.
Ik vermoed dat het een mogelijkheid is om klasse B een constructor te geven, die de property van zijn parent op de goede waarde zet. Het probleem daarmee is dat er ook nog een klasse C kan zijn, die de static variabele bijvoorbeeld de waarde "Hallo Wereld" wil geven. Als dat het geval is zou de "Hello World" van klasse B worden overschreven.
Ik zoek hier een oplossing voor, die ik me zo snel niet kan bedenken. Het property moet echt static zijn, omdat ik deze in klasse B gebruik in een static function.
Ik ben bezig met een scriptje, en nu loop ik tegen een probleem aan. Ik heb een abstracte klasse (we noemen hem even klasse A) waarin ik een property declareer maar nog geen waarde geef. Ik extend die klasse A met klasse B, waarin ik de variabele wel een waarde geef. Naast die property, heeft de klasse A ook nog een constructor. Deze is niet abstract, en maakt gebruik van de static property.
Een beetje pseudo-code om het te verduidelijken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?php abstract class A { static protected $var; public function __construct() { echo self::$var; } } class B extends A { static protected $var = 'Hello World'; } $b = new B(); |
In dit geval wil ik dat de uitkomst hiervan is: "Hello World", dit is niet het geval. Ik vermoed dat dit komt doordat er als het ware twee "versies" zijn van de property $var. Die van klasse A, en die van klasse B.
Ik vermoed dat het een mogelijkheid is om klasse B een constructor te geven, die de property van zijn parent op de goede waarde zet. Het probleem daarmee is dat er ook nog een klasse C kan zijn, die de static variabele bijvoorbeeld de waarde "Hallo Wereld" wil geven. Als dat het geval is zou de "Hello World" van klasse B worden overschreven.
Ik zoek hier een oplossing voor, die ik me zo snel niet kan bedenken. Het property moet echt static zijn, omdat ik deze in klasse B gebruik in een static function.