2015-03-22 8 views
11

Sto cercando di creare un oggetto che è chiamato a passare i dati all'archivio dati. La mia implementazione utilizza MySQLi, ma voglio consentire ad altri sviluppatori di utilizzare qualsiasi archivio dati che desiderano.Se utilizzo un metodo statico in PHP per creare una connessione a un database, avrò una o più connessioni?

Stavo pensando che un metodo statico potrebbe essere la risposta migliore, ma non avendo alcuna familiarità con loro non sono sicuro se creerei effettivamente molte connessioni o riutilizzare lo stesso.

<?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 
    } 

Ho avuto la giusta idea sui metodi statici e sto riutilizzando la stessa connessione o ne sto facendo di nuovi?

+0

Pensa a Singleton. – jsxqf

+3

Volevo solo precisare che in questo caso, "$ conn = NULL; if ($ conn == NULL) {" viene sempre valutato true :) – Michael

+0

Stai cercando di implementare un Singleton? (google) –

risposta

4

Il campo protected $conn non è un campo statico, pertanto non è accessibile da un metodo statico (vedere http://php.net/manual/en/language.oop5.static.php).

È inoltre necessario utilizzare self::$conn per accedere a un campo statico o $this->conn per accedere ai campi dell'oggetto. Nel modo in cui lo fai, usi una variabile locale rendendo il tuo protected $conn inutilizzato. Suppongo che il tuo codice dovrebbe apparire così:

<?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 
    } 
Problemi correlati