如果我在PHP中使用静态方法来创建与数据库的连接,我最终会得到一个或多个连接?

Mat*_*att 11 php mysqli static-methods

我正在寻找创建一个被调用的对象将数据传递到数据存储.我的实现使用MySQLi,但我想允许其他开发人员使用他们想要的任何数据存储.

我认为静态方法可能是最好的答案,但对它们不熟悉我不确定我是否真的会创建大量连接或重用相同的连接.

<?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
    }
Run Code Online (Sandbox Code Playgroud)

我是否对静态方法有了正确的认识,我是否会重复使用相同的连接或创建新的连接?

小智 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
    }
Run Code Online (Sandbox Code Playgroud)