2015-03-22 5 views
11

Szukam obiektu, który jest wywoływany w celu przekazania danych do magazynu danych. Moja implementacja używa MySQLi, ale chcę umożliwić innym programistom korzystanie z dowolnego magazynu danych, który chce.Jeśli używam metody statycznej w PHP do utworzenia połączenia z bazą danych, czy otrzymam jedno lub wiele połączeń?

Pomyślałem, że statyczna metoda może być najlepszą odpowiedzią, ale nie mając z nią nic wspólnego Nie jestem pewien, czy w rzeczywistości będę tworzył wiele połączeń lub używał tego samego.

<?php 
    class RECORDS { 

     protected $conn; 

     public function __construct() { 
      //contect to DB 
      $conn = $this::connection(); 
     } 

     public static function &connection(){ 
      $conn = NULL; 
      if($conn==NULL){ 
       $conn = new mysqli(_DB_HOST_, _DB_USER_, _DB_PASS_, _DB_HOST_); 
       if ($mysqli->connect_errno) { 
        die("Failed to connect to MySQL: (" . 
         $mysqli->connect_errno . ") " . 
         $mysqli->connect_error); 
       } 
      } 
      return $conn; 
     } 
     // ... methods that do stuff 
    } 

Czy mam dobre pojęcie na temat metod statycznych i czy będę ponownie używać tego samego połączenia lub tworzyć nowe?

+0

Pomyśl o singletonie. – jsxqf

+3

Chciałem tylko wskazać, że w tym przypadku, "$ conn = NULL; if ($ conn == NULL) {" zawsze będzie oceniać prawdę :) – Michael

+0

Czy próbujesz wdrożyć Singleton? (wygoogluj to) –

Odpowiedz

4

Twoje pole Twoje pole protected $conn nie jest statyczne, więc nie jest dostępne z metody statycznej (patrz http://php.net/manual/en/language.oop5.static.php).

Należy również użyć self::$conn, aby uzyskać dostęp do pola statycznego, lub $this->conn, aby uzyskać dostęp do pól obiektów. Sposób, w jaki to robisz, polega na użyciu zmiennej lokalnej, dzięki której Twój protected $conn nie jest używany. Przypuszczam, że Twój kod powinien wyglądać tak:

<?php 
    class RECORDS { 

     protected static $conn = null; 

     public function __construct() { 

      //Connect to database 
      self::$conn = $this::connection(); 
     } 

     public static function &connection(){ 

      if(self::$conn==NULL){ 
       self::$conn = new mysqli(_DB_HOST_, _DB_USER_, _DB_PASS_, _DB_HOST_); 
       if ($mysqli->connect_errno) { 
        die("Failed to connect to MySQL: (" . 
         $mysqli->connect_errno . ") " . 
         $mysqli->connect_error); 
       } 
      } 
      return self::$conn; 
     } 
     // ... methods that do stuff 
    } 
Powiązane problemy