Bug of geen bug?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bo az

Bo az

23/02/2008 12:53:00
Quote Anchor link
Gisteren 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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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

?>
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
PHP hulp

PHP hulp

19/04/2024 23:31:45
 
Stien ss

stien ss

23/02/2008 13:04:00
Quote Anchor link
En waar roep je dan de constructor van de parent aan? Je moet in je singleton class nog dit zetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
private function __construct () {
     parent::__construct ();
}


?>


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 -

Jelmer -

23/02/2008 13:08:00
Quote Anchor link
De 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.
 
Martijn B

Martijn B

23/02/2008 13:30:00
Quote Anchor link
Tussen het commentaar staat hier ook wat over:

http://www.php.net/manual/en/language.oop5.decon.php
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.