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

If I use a static method in PHP to create a connection to a database will I end up with one or many connections?

我正在考虑创建一个被调用以将数据传递到数据存储的对象。我的实现使用 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
    }

我对静态方法有正确的认识吗?我会重用相同的连接还是建立新的连接?

您的 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
    }