Singleton szülő - létezik ilyen PHP-ben?
Nem értem:Erre kapok egy Cannot access private property SingSing::$instance ha a SingSing::getInstance() metódust elindítom.
Ha meg a static:: helyett self:: van, akkor a Sing egyetlen példányát kapom vissza a SingSing::getInstance hívásakor is. Törődjek bele, hogy ez így működik és singletont nem lehet ebben a formában szülőként használni, vagy valamit elnéztem?
■
class Sing {
static private $instance;
final private function __construct(){
echo "<p>Sing konstruktor</p>";
}
public static function getInstance(){
$class=__CLASS__;
if(!isset(static::$instance)){ static::$instance=new $class; }
return static::$instance;
}
}
class SingSing extends Sing { }
Ha meg a static:: helyett self:: van, akkor a Sing egyetlen példányát kapom vissza a SingSing::getInstance hívásakor is. Törődjek bele, hogy ez így működik és singletont nem lehet ebben a formában szülőként használni, vagy valamit elnéztem?
miert nem teszed az $instance
akkor nem csak az ososztaly ferne hozza, hanem az osszes belole szarmaztatott osztaly is.
persze ez meg mindig nem oldana meg azt, hogy az osszes szarmaztatott osztalyod kozos instance valtozon kellene osztodkodjon.
Fabien Potencier igy oldotta meg ezt a problemat:
http://www.slideshare.net/fabpot/php-53-in-practice/27
csinalt egy registry-t, amiben tarolja az osszes szarmaztatott osztalyhoz on-demand a peldanyokat.
ja, az akar meg iden erkezo 5.4-es verzioban mar traits-ekkel is megoldhato lesz:
http://simas.posterous.com/new-to-php-54-traits
Tyrael
Köszi, ezt elfelejtettem itt
Valamivel jobb lett a helyzet: így a Sing-ből lesz két példányom az egy Sing és egy SingSing helyett. :)
----------------------------
Ennyire álomkóros vagyok vagy az első két sort követő szöveg utólag került a hozzászólásodba? :)
utolag kerult
pontosabban meg a te hozzaszolasod elott elkezdtem modositani/kiegesziteni, de csak utana kuldtem be.
Tyrael
Akkor jó. :) Köszi szépen!
Köszi szépen! Sajnos észrevettem, hogy Java-ban sem megy az, amire emlékeztem, ergo felesleges a PHP-től elvárni.
Kezdek rájönni, jobb ha feladom az egészet. Túl sokat hagytam ki, nem tudok visszarázódni. :(