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