Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Własna wersja klasy Singleton, dla wzorca Singletonu
likemandrake
post 4.06.2008, 20:22:53
Post #1





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

Ostrzeżenie: (0%)
-----


Witam

Na tyle ile możliwości ma PHP w tej dziedzinie napisałem własną wersję klasy Singleton dla wzorca Singletonu, zamieszczając ją tutaj na forum chciałbym uzyskać troche opinii i propozycji odnośnie mojego rozwiązania smile.gif

  1. <?php
  2.  
  3. abstract class Singleton {
  4. private static $aInstances = array();
  5.  
  6. final protected function __construct(&$aArguments) {
  7. call_user_func_array(array($this, '__initialize'), $aArguments);
  8. }
  9. protected function __initialize() {
  10.  
  11. }
  12. final public function __clone() {
  13. trigger_error("Cloning of class '" . get_class($this) . "' is not allowed", E_USER_ERROR);
  14. }
  15. final public static function getInstance($sClassName) {
  16. if(!isset(self::$aInstances[$sClassName])) {
  17. $aArguments =& func_get_args();
  18. array_shift($aArguments);
  19. self::$aInstances[$sClassName] = new $sClassName($aArguments);
  20. }
  21. return self::$aInstances[$sClassName];
  22. }
  23. }
  24.  
  25. ?>


Gdzieś czytałem, że nie zaleca się rozpoczynać nazw metod od dwóch podkreślników, gdyż koliduje to z ogólnie przyjętym schematem nazewnictwa metod magicznych oraz konstruktora i destruktora w PHP. Jeśli też tak uważacie, proszę o propozycję ładnej nazwy angielskiej tejże metody smile.gif

Przykład użycia:
  1. <?php
  2.  
  3. require_once './class.Singleton.php';
  4.  
  5. class Example extends Singleton {
  6. private $sParam;
  7.  
  8. protected function __initialize($sParam) {
  9. $this->sParam = $sParam;
  10. }
  11. public function __toString() {
  12. return $this->sParam;
  13. }
  14. }
  15.  
  16. $oFirstExample = Example::getInstance('Example', "Parametr przekazany do konstruktora");
  17. // lub też Singleton::getInstance('Example', ...
  18.  
  19. $oSecondExample = Example::getInstance('Example');
  20.  
  21. echo $oFirstExample . '<br>';
  22. echo $oSecondExample;
  23.  
  24. ?>


Pozdrawiam

Ten post edytował Ociu 8.06.2008, 15:34:00
Powód edycji: poprawiłem bbCode (ociu)


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:51