2015-03-22 6 views
11

Ich bin dabei, ein Objekt zu erstellen, das zum Übergeben von Daten an den Datenspeicher aufgerufen wird. Meine Implementierung verwendet MySQLi, aber ich möchte anderen Entwicklern ermöglichen, den gewünschten Datenspeicher zu verwenden.Wenn ich eine statische Methode in PHP verwende, um eine Verbindung zu einer Datenbank herzustellen, werde ich mit einer oder mehreren Verbindungen enden?

Ich dachte, dass eine statische Methode die beste Antwort sein könnte, aber keine Vertrautheit mit ihnen Ich bin unsicher, ob ich tatsächlich viele Verbindungen erstellen oder die gleiche wiederverwenden würde.

Habe ich die richtige Idee über statische Methoden und werde ich die gleiche Verbindung wiederverwenden oder neue herstellen?

+0

Denken Sie über Singleton. – jsxqf

+3

Ich wollte nur darauf hinweisen, dass in diesem Fall "$ conn = NULL; if ($ conn == NULL) {" wird immer als wahr ausgewertet werden :) – Michael

+0

Versuchen Sie ein Singleton zu implementieren? (Google es) –

Antwort

4

Ihr protected $conn Feld ist kein statisches Feld, daher ist es nicht von einer statischen Methode aus zugänglich (siehe http://php.net/manual/en/language.oop5.static.php).

Sie sollten auch self::$conn verwenden, um auf ein statisches Feld zuzugreifen, oder $this->conn, um auf Objektfelder zuzugreifen. Wie Sie es tun, verwenden Sie eine lokale Variable, die Ihre protected $conn unbenutzt macht. Ich nehme an, Ihr Code sollte so aussehen:

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