JensNTI

singleton

May 23rd, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.80 KB | None | 0 0
  1. <?php
  2.  
  3. class Singleton
  4. {
  5.     private $_values = array(); // för att hålla värden för demonstration av exemplet
  6.     private static $_instance; // här sparar vi instansen av klassen när den skapats så att det inte kommer att skapas flera
  7.  
  8.     private function __construct() {} // vi vill inte ha en __construct metod som går att komma åt
  9.  
  10.     /* getInstance är den metod vi kommer att använda för att skapa en ny instans av klassen
  11.      * detta är det som "gör det" singleton kan man säga
  12.      * Vi kollar om det finns en instans av klassen sparad, om så inte är fallet så skapas en ny
  13.      * i annat fall så använder vi den som finns
  14.      */
  15.     public static function getInstance() {
  16.         if (empty(self::$_instance)) {
  17.             self::$_instance = new Singleton();
  18.         }
  19.         return self::$_instance;
  20.     }
  21.  
  22.     // 2 metoder, lägga till värde och hämta
  23.     public function setVal($key, $val) {
  24.         $this->_values[$key] = $val;
  25.     }
  26.  
  27.     public function getVal($key) {
  28.         return $this->_values[$key];
  29.     }
  30. }
  31.  
  32.  
  33. // $test = new Singleton(); Detta ger fel då construct metoden inte är tillgänglig
  34.  
  35. //istället så använder vi static metoden getInstance för att skapa en instans av klassen
  36. $test = Singleton::getInstance();
  37.  
  38. //vi kan nu sätta värden till instansen av klassen
  39. $test->setVal("test", "hej");
  40.  
  41. // och skriva ut det, så att vi ser att det fungerar
  42. echo $test->getVal("test");
  43.  
  44. // ta bort $test
  45. unset($test);
  46.  
  47. // echo $test->getVal("test"); skulle här ge fatal error då $test inte har ett värde
  48.  
  49. // hämta en instans av klassen om det finns, annars skapa en ny
  50. $test2 = Singleton::getInstance();
  51.  
  52. // värdet är fortfarande samma eftersom vårt singleton mönster inte skapat en ny instans av klassen
  53. echo $test2->getVal("test");
Advertisement
Add Comment
Please, Sign In to add comment