Ne mogu skuziti ovaj singleton pattern… Mucim se vec dugo s tim i nikako da skuzim…
Imam klasu Base, koju extendaju sve ostale klase:
[php]class Base
{
private static $_instance;
public static function get_instance()
{
if ( ! ( self::$_instance instanceof self ) )
{
self::$_instance = new self();
}
return self::$_instance;
}
}[/php]
Imam klasu Loader, koja u konstruktoru ima:
[php]class Loader extends Base
{
public function __construct()
{
foreach($this->_folders as $folder)
{
$this->_load($folder.’/’); // includa sve kontrolere, modele i library fajlove
}
Base::get_instance();
}
}[/php]
I nista se nedogada, kao da nije instancirano… Moze li mi neko pomoci kako da instanciram klasu pomocu singletona?
Evo imaš tu http://php.net/manual/en/language.oop5.patterns.php
singleton pattern ali i neke druge.
U tvojem primjeru radiš extends na klasu koju kasnije pozivaš i još pri toj klasi na koju radiš extends koristiš Singleton desing pattern što nema smisla.
Mislim da kad koristiš Singleton desing pattern na tu klasu se ne radi extend što i ima nekog smisla, ako se uzme da je kod Singleton desing pattern konstruktor privatan ili se to simulira da bude privatan.
Neznam možda griješim.:gitara:
Extend sam maknio, popravio sam kod iz klase, ali i dalje se loader ne instancira. Znam po tome što u konstruktoru ima funkciju za automatsko loadanje svih potrebnih fajlova…
[php]
// klasa Loader
public function __construct()
{
Base::get_instance();
foreach($this->_folders as $folder)
{
$this->_load($folder.'/');
}
}
// klasa Base
class Base
{
protected static $instance;
private function __construct() {}
private function __clone() {}
public static function get_instance()
{
if ( ! isset(self::$instance))
{
self::$instance = new self();
}
return self::$instance;
}
Pa u tom je problem, sto je svagdje drukciji kod za singleton. Loader se samo instancira, kad je instanciran konstruktor zove ostalo, ali i zelim da SVE ostale klase imaju pristup Loaderu (i Base zbog instanciranja). + hocu da se Loader instancira cim je includan… Izvedivo? :o
P.S.: Inače se prema nekima korištenje Singelton klase u PHP, ali i u drugim “web jezicima” ne preporuča, odnosno kaže se da nema smisla koristiti s obzirom na to da je web stateless, a s obzirom da ti je CodeIgniter predložak po kojem razvijaš svoj framework pogledaj tamo i vidjet ćeš da imaš nekakvu emulaciju Singleton klase ali nikako onu pravu implementaciju te iste.
A sve je moguće samo je pitanje koliko bi smisla imalo odnosno koliko je kvalitetno da su sve klase u aplikaciji povezane. To se krši sa osnovama dobrog OOP dizajna. Loose coupling.