Singleton - moduły do CMS

0

Witam, pierwszy raz używam Singleton'a i ciekawi mnie jedna rzecz, piszę silnik do CMS'a i właśnie tutaj chciałem sprawdzić działanie tego wzorca projektowego. Modułów będzie dużo i chciałbym wiedzieć czy to w jakiś sposób będzie wydajniejsze niż normalnie wywołanie modułu. Oto taki prosty kod który pokazuje jak chciałbym to zrobić.
Tutaj plik główny silnika:

<?php	
	class CMS {
		private static $instance;
		private function __construct() {}

		public static function getInstance(){
			if (self::$instance === null) {
				echo ' jest ';
				self::$instance = new CMS();
			}
			return self::$instance;
		}

		public function load($modul){
			if (file_exists(strtolower($modul).'.php')){
				require_once(strtolower($modul).'.php');
				return $modul::getInstance();
			}
		}
	} 

	CMS::getInstance()->load('Portfolio')->wyswietlWpisy();
	CMS::getInstance()->load('Portfolio')->dodajWpis();
?>

A tu plik z modułem, dla przykładu to Portfolio:

 
<?php
	class Portfolio {	
		private static $instance;
		private function __construct() {}

		public static function getInstance(){
			if (self::$instance === null) {
				self::$instance = new Portfolio();
			}
			return self::$instance;
		}
		public function wyswietlWpisy(){
			echo 'tu będą wpisy';
		}	
		public function dodajWpis(){
			echo 'tu będzie dodawanie wpisu';
		}	
	}
?>

Proszę o opinie.

1

Moim zdaniem singleton nie ma praktycznie żadnego zastosowania w php. Dla każdego wywołania i tak tworzony jest nowy obiekt danej klasy, który jest unikatowy dla każdego wywołania.
Tutaj kilka linków:
Static call versus Singleton call in PHP
Static methods vs singletons: choose neither
W językach statefull (jak to po polsku się mówi?), gdzie obiekty nie są tworzone i niszczone przy każdej akcji, pewnie można coś z singletonem zrobić, ale mnie to od zawsze odradzano.
Singletons: anti-pattern, or worst anti-pattern ever?
Singleton is an anti-pattern
Jest cała masa różnych artykułów na temat singletona.

A teraz odpowiedź na pytanie ;)
Nie wiem co znaczy normalne wywołanie. Jeśli zastosujesz normalne tworzenie obiektów, to szybkość powinna być prawie identyczna (i tak zawsze tworzony będzie nowy obiekt), jeśli zastosujesz jakieś inne cuda to nie mam pojęcia.

0

Zajrzę do tych linków, bo na prawdę ciekawy jestem jak wygląda wydajnościowo, ale jeśli podobnie, to wygodniej mi będzie chyba w przypadku CMS ładować tylko dany moduł. Co miałem na myśli mówiąc normalne wywołanie? Chodziło mi o stworzenie obiektu na początku strony np.
$portfolio = new Portfolio();
i później zamiast:

       CMS::getInstance()->load('Portfolio')->wyswietlWpisy();
        CMS::getInstance()->load('Portfolio')->dodajWpis();

odwołuję się bezpośrednio do obiektu:

       $portfolio->wyswietlWpisy();
       $portfolio->dodajWpis();

1 użytkowników online, w tym zalogowanych: 0, gości: 1