Php 将DB对象传递到经过多次扩展的类中的简单方法
考虑以下PHP代码:Php 将DB对象传递到经过多次扩展的类中的简单方法,php,oop,class,extends,Php,Oop,Class,Extends,考虑以下PHP代码: <?php require_once("myDBclass.php"); class a { private $tablename; private $column; function __construct($tableName, $column) { $this->tableName = $tablename; $this->column = $column; }
<?php
require_once("myDBclass.php");
class a {
private $tablename;
private $column;
function __construct($tableName, $column) {
$this->tableName = $tablename;
$this->column = $column;
}
function insert() {
global $db;
$db->query("INSERT INTO ".$this->tableName." (".$this->column.") VALUES (1)");
}
}
class x extends a {
function __construct() {
parent::construct("x", "colX");
}
}
class y extends a {
function __construct() {
parent::construct("y", "colY");
}
}
?>
我在另一个文件中实例化了$db对象,但希望每次在类“a”中定义新函数时都不使用global关键字将其传递到类a的函数中
我知道我可以通过在实例化类X和Y时传递DB对象来实现这一点,然后通过这种方式将其传递给类A(就像我目前对tablename和column所做的那样),但是我永远不知道我可能会扩展类A多少次,并且认为一定有另一种更简单的方法
有没有人知道一个更好的解决办法,我可以考虑做到这一点?
提前感谢查看下表。您不应该需要使用globals
,因为您似乎知道这是不必要的 您可以使用PHP的
现在,该属性将在该对象及其子对象的所有实例中共享。我不确定提及singleton模式对他有何帮助如果数据库类被设置为singleton类,那么他可以轻松调用
$db=db::singleton()
和viola,他现在有db类可供该类使用,更好的是,它肯定是单个对象,而不是多个/重复对象。更好的是,他可以在脚本中的任何地方使用该对象,只要使用该语句就可以包含dbclass;是的,经过一些阅读,我明白你的意思。我将做一些研究,看看我是否能想出一个更好的答案,因为现在我有点好奇。不过,如果您有更好的答案,请告诉我们。请注意:现在,2012年,Singleton模式似乎过时了,被一些PHP rockstars称为“坏模式”(因为它破坏了单元测试等)。将$db对象传递到其他类(依赖项注入模式)现在似乎更流行。
class A {
static $db;
public static function setDB($db) {
self::$db = $db;
}
}