2013-06-01 35 views
1

我似乎无法解决此错误,当我尝试使用反射创建对象并每次都得到此错误时。PHP ReflectionClass - 致命错误:类名称必须是有效的对象或字符串

这里是我的代码:

public static function getMapper($klass) { 
    echo $klass; 
    if(class_exists($klass)) { 
     echo "YES!"; 
    } else { 
     echo "NO!"; 
    } 

    $mapperClass = new \ReflectionClass($klass); 
    print_r($mapperClass); 
    return new $mapperClass->newInstance(); 
} 

第一回声打印 “\域\会员”。这是正确的,因为它是我通过的,并且它是我正在尝试创建Object的类。

接下来,回显打印“是”。这个课存在!

接下来,我通过$克拉斯到ReflectionClass和...

下的print_r打印:

ReflectionClass Object ([name] => domain\Member) 

看到\域消失之前。可能是问题的一部分?

然后,当我调用newInstance()我得到错误。

致命错误:类名必须是一个有效的对象或在C字符串:\用户\扎克\ PhpstormProjects \ MyApp的\基地\ Registry.php上线53

所以我不知道是什么问题是。成员类存在于域名空间中。以防偶像中的某些东西是错误的,在这里;还没有太多:

<?php 

namespace domain; 

use base\Registry; 
use domain\base\BaseMember; 

class Member extends BaseMember { 

/** 
* @param $displayName 
* @return Member 
*/ 
public static function findMemberByDisplayName($displayName) { 
    return Registry::memberRepository()->findMemberByDisplayName($displayName); 
} 

回答

4

你不需要在最后一行new。它应该是这个:

return $mapperClass->newInstance(); 

什么是实际发生的事情,是你得到会员的一个实例,然后该实例传递的类名新。所以PHP看到了return new {instance of Member},它抱怨对象的实例不是有效的类名。

+0

呃,它总是那么小...... – user1513171

相关问题