使用变量动态加载类

时间:2010-01-15 10:56:56

标签: php singleton classloader

我决定在我的应用程序中使用单例模式。这对我来说最有意义。然而,就在我觉得自己取得了一些进展的时候,我遇到了另一面墙。

我有一个加载功能。加载功能执行以下操作。

检查以前是否已加载班级。 - 如果是这样 - 返回$ class :: get_instance(); - 否则 - 在各个地方寻找课程 - 如果找到 - 返回$ class :: get_instance(); - 否则返回错误。

在采用Singleton模式之前,我使用load类实例化了类。

在控制器中我会有这个。

$session = $this->load->library('session');

然后,加载类将找到该文件并返回..

return new $class_name;

我希望在改变加载类的方法时可能会调整几行,但这些调整会产生语法错误。

return $class_name::get_instance();

有没有办法在没有语法错误的情况下编写上面的行?

2 个答案:

答案 0 :(得分:4)

如何使用call_user_func?

return call_user_func(array($class_name, "get_instance"));

http://www.php.net/manual/en/function.call-user-func.php

答案 1 :(得分:1)

尝试call_user_func()

call_user_func(array($classname, 'getInstance'));
call_user_func($classname .'::getInstance'); // As of 5.2.3

此外,如果您想构建一个为您处理任意对象创建的类管理器,请查看Symfony Dependency Injection Components,并且通常也很容易关注presentation on SlideShare about Dependency Injection with PHP