2015-03-22 11 views
11

Tôi đang xem xét việc tạo một đối tượng được gọi để chuyển dữ liệu đến kho dữ liệu. Việc triển khai của tôi sử dụng MySQLi, nhưng tôi muốn cho phép các nhà phát triển khác sử dụng bất kỳ cửa hàng dữ liệu nào họ muốn. Tôi đã nghĩ rằng một phương pháp tĩnh có thể là câu trả lời hay nhất, nhưng không có bất kỳ sự quen thuộc nào với chúng, tôi không chắc liệu tôi có thực sự tạo ra nhiều kết nối hay tái sử dụng cùng một kết nối hay không.Nếu tôi sử dụng một phương pháp tĩnh trong PHP để tạo kết nối tới cơ sở dữ liệu, tôi sẽ kết thúc bằng một hoặc nhiều kết nối?

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

Tôi có ý tưởng đúng về phương pháp tĩnh và tôi sẽ sử dụng lại cùng một kết nối hoặc tạo kết nối mới?

+0

Hãy nghĩ về singleton. – jsxqf

+3

Chỉ muốn chỉ ra rằng trong trường hợp này, "$ conn = NULL; nếu ($ conn == NULL) {" luôn được đánh giá là đúng :) – Michael

+0

Bạn đang cố triển khai Singleton? (Google nó) –

Trả lời

4

Trường protected $conn của bạn không phải là trường tĩnh nên không thể truy cập được từ phương thức tĩnh (xem http://php.net/manual/en/language.oop5.static.php).

Bạn cũng nên sử dụng self::$conn để truy cập trường tĩnh hoặc $this->conn để truy cập các trường đối tượng. Cách bạn làm điều đó, bạn sử dụng biến cục bộ làm cho protected $conn không được sử dụng. Tôi cho rằng mã của bạn sẽ trông giống như sau:

<?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 
    } 
Các vấn đề liên quan