2015-03-22 3 views
11

मैं एक ऐसी वस्तु बनाने की सोच रहा हूं जिसे डेटा स्टोर में डेटा पास करने के लिए कहा जाता है। मेरा कार्यान्वयन MySQLi का उपयोग करता है, लेकिन मैं अन्य डेवलपर्स को जो भी डेटा स्टोर चाहता हूं उसका उपयोग करने की अनुमति देना चाहता हूं।यदि मैं डेटाबेस में कनेक्शन बनाने के लिए PHP में एक स्थिर विधि का उपयोग करता हूं तो क्या मैं एक या कई कनेक्शनों के साथ समाप्त हो जाऊंगा?

मैं सोच रहा था कि एक स्थिर विधि सबसे अच्छा जवाब हो सकता है, लेकिन उनके साथ कोई परिचितता नहीं है, मुझे यकीन नहीं है कि अगर मैं वास्तव में बहुत से कनेक्शन बना रहा हूं या उसी का पुन: उपयोग कर रहा हूं।

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

क्या मुझे स्थिर तरीकों के बारे में सही विचार है और क्या मैं एक ही कनेक्शन का उपयोग कर रहा हूं या नए बना रहा हूं?

+0

सिंगलटन के बारे में सोचें। – jsxqf

+3

बस यह इंगित करना चाहता था कि इस मामले में, "$ conn = NULL; अगर ($ conn == NULL) {" हमेशा सत्य का मूल्यांकन करने जा रहा है :) – Michael

+0

क्या आप सिंगलटन को लागू करने की कोशिश कर रहे हैं? (यह गूगल) –

उत्तर

4

आपका protected $conn फ़ील्ड एक स्थिर क्षेत्र नहीं है, इसलिए यह एक स्थिर विधि से उपलब्ध नहीं है (http://php.net/manual/en/language.oop5.static.php देखें)।

आपको ऑब्जेक्ट फ़ील्ड तक पहुंचने के लिए स्थिर क्षेत्र तक पहुंचने के लिए self::$conn का उपयोग करना चाहिए, या $this->conn का उपयोग करना चाहिए। जिस तरह से आप इसे करते हैं, आप स्थानीय चर का उपयोग करते हैं जो आपके protected $conn अप्रयुक्त होते हैं। मुझे लगता है कि आपका कोड इस तरह दिखना चाहिए:

<?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 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे