考虑以下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;
    }
}

现在该属性将跨对象的所有实例共享和它的孩子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top