我正在尝试充分利用面向对象的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都会重复出现这是一个记忆明智的问题吗?有没有更好的方法来做到这一点?这是可以在真实项目中使用的东西吗?
非常感谢
答案 0 :(得分:3)
我不是相当确定你想要实现的目标(我猜有一些关于如何以不同方式做到这一点的元素;),但你可以放松一下内存消耗;你只传递对同一个对象的引用,所以所有重复的是指向对象实例的4个字节的指针!
尼克