如何创建一个包含几个可以相互通信的类的类?

时间:2010-08-16 10:08:39

标签: php oop

我正在尝试充分利用面向对象的php并沿途学习一些东西。 按照MVC教程,我能够做到这一点:

class Repository {

    private $vars = array();

    public function __set($index, $value){
        $this->vars[$index] = $value;
    }

    public function __get($index){
        return $this->vars[$index];
    }
}
/*
*/
function __autoload($class_name) {
    $filename = strtolower($class_name) . '.class.php';
    $path = dirname(__FILE__);
    $file = $path.'/classes/' . $filename;

    if (file_exists($file) == false){
        return false;
    }
    include ($file);
}
//Main class intialization
$repo = new Repository;
//Configuration loading
$repo->config = $config;
//Classes loading
$repo->common = new Common($repo);
$repo->db = new Database($repo);
$repo->main = new Main($repo);

然后每个班级都会遵循这个模板:

class Database{

    private $repo;

    function __construct($repo) {
        $this->repo= $repo;
    }
}

这样我就可以访问在我所在的类之前加载的类的所有方法和变量。在我可以在主类中执行此操作之前的示例中:

$this->repo->db->someMethod();

让我感到震惊的是,每次加载一个新类时,对象$ repo都会重复出现这是一个记忆明智的问题吗?有没有更好的方法来做到这一点?这是可以在真实项目中使用的东西吗?

非常感谢

1 个答案:

答案 0 :(得分:3)

我不是相当确定你想要实现的目标(我猜有一些关于如何以不同方式做到这一点的元素;),但你可以放松一下内存消耗;你只传递对同一个对象的引用,所以所有重复的是指向对象实例的4个字节的指针!

尼克