试图了解和使用OOP在PHP我有一个名为dbcon
类。我下面在YouTube上的教程,使用保护功能connect()
连接到数据库。现在的问题是,为什么不能连接在构造函数中的DB?
function __construct() {
$this->DBSERVER = "localhost"
$this->DBUSERNAME = "root"
$this->DBPASSWORD = ""
$this->DBNAME = "thedb"
$conn = new mysqli($this->DBSERVER, $this->DBUSERNAME, $this->DBPASSWORD, $this->DBNAME);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
}
有人可以让我知道什么是这样做的好处还是缺点?
<?PHP
class dbcon {
private $DBSERVER;
private $DBUSERNAME;
private $DBPASSWORD;
private $DBNAME;
protected function connect(){
$this->DBSERVER = "localhost"
$this->DBUSERNAME = "root"
$this->DBPASSWORD = ""
$this->DBNAME = "thedb"
$conn = new mysqli($this->DBSERVER, $this->DBUSERNAME, $this->DBPASSWORD, $this->DBNAME);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
}
?>
我对这个第一个想到的是,这可能是很难单元测试。你在做实例从该类每次,必须有一个数据库,在那里你可以连接到,否则它会失败。
当然,connect()方法仍然难以测试,但你可以很容易检验休息。
有一招叫的方法和在一行中创建一个类的实例:
($myDBInstance = new dbcon("localhost", "mirko", "mysecret", "mydb"))->connect();
另一种方法是调用一个静态方法,这使得它明确,那就是自动连接,如果你不喜欢上面的解决方案:
$myDBInstance = dbcon::getInstanceAndConnect("localhost", "mirko", "mysecret", "mydb");
这可能是这样的:
public static getInstanceAndConnect(a,b,c,d) {
$mydbcon=new dbcon(a,b,c,d);
$mydbcon->connect();
return $mydbcon;
}
遗憾的懒惰参数:-)