所以我想得到一个给定类的实例,这是我的代码:
class OwnerServiceFactory
{
protected static $instance;
protected static $provider;
public function __construct($provider = 'xxx')
{
static::$provider = $provider;
}
final public static function getInstance()
{
$class = ucfirst(static::$provider)."OwnerService";
if(!static::$instance) static::$instance = new $class();
return static::$instance;
}
}
OwnerService和OwnerServiceFactory类已在同一名称空间中。
问题出在这一行if(!static::$instance) static::$instance = new $class();
当我尝试我的代码时,我得到了 Class' OwnerService'找不到,当我用新的OwnerService()更改new $class();
时,它可以正常工作。
答案 0 :(得分:1)
$class
需要包含要从字符串实例化的完全限定类名。你说这些类是在命名空间中吗?所以$class
需要包含该命名空间,现在我假设它只是OwnerService
,PHP认为它存在于根命名空间\OwnerService
中。