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.

<?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

?>
En waar roep je dan de constructor van de parent aan? Je moet in je singleton class nog dit zetten:

<?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.
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.

Reageren