我是很新的面向对象,我有一个快速的问题:如何在其他类中调用类?
我有我的代码中使用以下类别:
Class DB {
//contains all my mysqli stuff
}
Class A {
All functions within this class will need a db connection
}
如何创建,而无需创建类内部的连接每个函数都有一个新的数据库实例?
这甚至可能吗?
在此先感谢。
我是很新的面向对象,我有一个快速的问题:如何在其他类中调用类?
我有我的代码中使用以下类别:
Class DB {
//contains all my mysqli stuff
}
Class A {
All functions within this class will need a db connection
}
如何创建,而无需创建类内部的连接每个函数都有一个新的数据库实例?
这甚至可能吗?
在此先感谢。
对于class DB
,您可以设置您的数据库连接,例如打开&关闭。对于class A
,您可以使用extends
将该类设置为继承class DB
的方法。由于您不需要从外部访问您的班级,因此我已将class DB
中的方法(程序中的功能)更改为protected
,因为在PHP中默认情况下所有方法都是public
。
我还添加了Constructor(如注释中所述)的用法,因此当从Class A
创建对象时,您的数据库连接将自动打开。就个人而言,我不会在构造函数中打开数据库连接,但这只是我偏执狂。如果您有疑问,只要确保您关闭了方法中的连接。
<?php
Class DB {
protected function conDB() { //Protected can only be accessed by same class or inherited class
echo "Open connection to DB";
}
protected function closeDB() { //Protected can only be accessed by same class or inherited class
echo "Connection Closed";
}
}
Class A extends DB { //Extends will use all methods from inherited class
function __construct() { //Constructer will run on Object creation and open connection to DB
$this->conDB();
}
public function selectDB() {
echo "<br>";
echo "Data Select Here!";
echo "<br>";
$this->closeDB(); //You will still need to close the DB Connection
}
}
从类创建对象
$select = new A(); //Create Object
$select->selectDB();
输出调用类
Open connection to DB
Data Select Here!
Connection Closed
阅读材料:
有一堆答案在这里,在技术上回答这个问题,但他们都教不正确的做法。良好的面向对象设计的一大部分是赞成构造而不是继承。
如果您的A
类是需要与数据库一起工作的模型,那么让该类扩展为DB
是一个非常糟糕的主意。相反,你只是想传递DB
到A
的构造:
class A {
protected $db;
function __construct(DB $db) {
$this->db = $db;
}
}
现在A
每个方法都可以通过$this->db
访问DB
。
这也解决了其开放的A
每个实例很多数据库连接的问题(或将来,如果你需要一个B
或C
类)。
A
本身不应该创建自己的DB
实例,但这应该不是得到通过注入无论构建A.这就是所谓的依赖注入和良好的面向对象设计的另一个原则。
为什么不使用'__construct()'函数? – Blueblazer172
关于你的数据库类,我想下面的阅读对你有用:[你的第一个数据库包装的儿童疾病](https://phpdelusions.net/pdo/common_mistakes) –