考虑以下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");
}
}
?>
我有一个在另一个文件中实例化的$db对象,但每次我在"a“类中定义一个新函数时,我都希望以某种方式将它传递到a类的函数中,而不使用全局关键字。
我知道我可以通过在实例化类X和Y时传递DB对象,然后以这种方式将它传递给类A(就像我现在对表名和列所做的那样),但是我从来不知道我可以扩展类A多少次,并且认为一定有另一种更简单的方法。
有没有人知道更好的解决方案,我可以考虑实现这一点?
提前感谢
发布于 2010-09-03 06:59:41
查看Singleton Design Pattern。您不应该需要使用globals
,因为您似乎知道它是不必要的。
发布于 2010-09-03 06:59:58
你可以使用PHP的static properties。
class A {
static $db;
public static function setDB($db) {
self::$db = $db;
}
}
现在,该属性将在该对象及其子对象的所有实例之间共享。
https://stackoverflow.com/questions/3631860
复制相似问题