题
考虑以下PHP代码:
<?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");
}
}
?>
我有一个是在另一个文件中,但希望实例以某种方式传递到类的功能,这在不使用全球关键字每次我在“A”类定义一个新的功能,我的$ db对象。
我知道我可以通过实例化类X和Y时,通过数据库对象,然后将其通过A类做到这一点的方式(如即时通讯目前正在与表名和列做),但我从来不知道有多少次我可能会延长A级,并认为必须有某种方式另一种更简单的方法。
一个更好的解决方案中没有任何人知道,我可以考虑实现这一目标?
在预先感谢
解决方案
查找到 Singleton设计模式。你不应该需要使用globals
,你似乎知道这是没有必要的。
其他提示
您可以使用PHP的静态属性。
class A {
static $db;
public static function setDB($db) {
self::$db = $db;
}
}
现在该属性将跨对象的所有实例共享和它的孩子。
不隶属于 StackOverflow