Bug of geen bug?
Bo az
23/02/2008 12:53:00Gisteren ontdekte ik een stukje functionaliteit waar ik niet van af wist en wat mij ook niet logisch lijkt, maar misschien kan iemand het verklaren?
Ik denk dat het, het duidelijkst is als ik een code voorbeeld geef, het gaat er om dat ik de constructor van de parent kan aanroepen ondanks deze private is.
Ik denk dat het, het duidelijkst is als ik een code voorbeeld geef, het gaat er om dat ik de constructor van de parent kan aanroepen ondanks deze private is.
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
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
<?php
abstract class Foo {
private function __construct() {
echo 'abstract class Foo -> private function __construct php'.phpversion();
}
}
class Singleton extends Foo {
private static $instance = null;
public static function getInstance() {
if(!(self::$instance instanceof self)) {
self::$instance = new self();
}
return self::$instance;
}
}
$a = Singleton::getInstance(); // abstract class Foo -> private function __construct php5.2.5
?>
abstract class Foo {
private function __construct() {
echo 'abstract class Foo -> private function __construct php'.phpversion();
}
}
class Singleton extends Foo {
private static $instance = null;
public static function getInstance() {
if(!(self::$instance instanceof self)) {
self::$instance = new self();
}
return self::$instance;
}
}
$a = Singleton::getInstance(); // abstract class Foo -> private function __construct php5.2.5
?>
Gewijzigd op 01/01/1970 01:00:00 door Bo az
PHP hulp
23/11/2024 10:55:54stien ss
23/02/2008 13:04:00En waar roep je dan de constructor van de parent aan? Je moet in je singleton class nog dit zetten:
Dan zou het als het goed is een error op moeten leveren.
Edit: het even jou manier getest, dat is inderdaad vreemd. Volgens mij zou dat niet mogen.
Dan zou het als het goed is een error op moeten leveren.
Edit: het even jou manier getest, dat is inderdaad vreemd. Volgens mij zou dat niet mogen.
Gewijzigd op 01/01/1970 01:00:00 door stien ss
Jelmer -
23/02/2008 13:08:00De constructor van de parent wordt weldegelijk aangeroepen, anders zou je de echo niet krijgen.
Vanuit de static methode in de child een private property van de parent setten wil niet, dus ik denk dat het een bug is binnen PHP. Hij kan geen constructor vinden, dus gaat zoeken bij de overgeërfde klasse, maar vergeet daarbij de toegang te controleren.
Vanuit de static methode in de child een private property van de parent setten wil niet, dus ik denk dat het een bug is binnen PHP. Hij kan geen constructor vinden, dus gaat zoeken bij de overgeërfde klasse, maar vergeet daarbij de toegang te controleren.