我有一个“主类”,可以生成数据库访问。类似的东西:
class ObjetBd extends Objet
{
protected $bd;
public function __construct()
{
parent::__construct();
$this->bd = new BD();
$this->bd->connect();
}
}
这对我来说是“干净”的代码(我为了紧凑而删除了评论)。
现在我的问题是为每个对象生成$this->bd
。
我想知道静态对象是否生成+初始化一次。
我想调用connect()
一次并且只使用一个连接,而不使用直接调用静态方法(即继续像以前一样使用$this->bd
)
如果是这样的话,你能不能说下面的代码是否能完美运行,是否应该使用更少的资源:
class ObjetBd extends Objet
{
static private $bd_static;
protected $bd;
public function __construct()
{
parent::__construct();
if (!isset(self::$bd_static)) {
self::$bd_static = new BD();
self::$bd_static->connect();
}
$this->bd = self::$bd_static;
}
}
答案 0 :(得分:0)
是的,你这样做是对的。 忽略单身评论,单身是一件好事,可以避免。
虽然我想提出一个建议:
我将假设BD是某种数据库。 OOP的强大功能是能够对事物进行子类化,并在不改变行为的情况下替换对象。
因此可能更好地在构造函数中传递$ bd对象。请记住一些事情。这称为“依赖注入”或“控制反转”。