我正在尝试创建一种从给定变量加载和实例化类的函数.像这样的东西:
如果我像这样使用它:
它应该包括并实例化会话类.
BTW:静态getInstance函数来自以下代码:
问题是,现在使用类中的函数的方法是这样的:
但是现在我想将它构建成一个函数,以便我再也不必使用那行代码.我只是说loadClass('session'); 而且我可以使用$ session-> blablablafunction();
在PHP 5.3中显然可以在变量类名上调用静态函数:
Foo::aStaticMethod(); $classname = 'Foo'; $classname::aStaticMethod(); // As of PHP 5.3.0
http://php.net/manual/en/language.oop5.static.php
我自己肯定可以使用它.
在此之前,您无法真正假设您正在加载的每个类都设计为单例.只要你使用<5.3,就必须加载类并通过构造函数实例化:
function loadClass($class) { $sClassPath = SYSPATH."/classes/{$class}.php"; if (file_exists($sClassPath)) { require_once($sClassPath); $class = new $class; }
}
要么
只需加载类而不从中创建对象.然后在那些意味着是单例的东西上调用":: getInstance()",在loadClass()函数之外调用那些不是"new"的东西.
虽然,正如其他人早先指出的那样,__ autoload()可能对您有用.
你可以使用call_user_func()
:
$class = call_user_func(array($class, 'getInstance'));
第一个参数是一个callback
类型,在这种情况下包含类名和方法名.