PHP ReflectionClass - 致命错误:类名必须是有效对象或字符串

时间:2013-06-01 22:45:38

标签: php class reflection

当我尝试使用Reflection创建一个Object并且每次都出现此错误时,我似乎无法解决此错误。

这是我的代码:

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();
}

第一个echo打印“\ domain \ Member”。这是正确的,因为它是我传入的,它是我正在尝试创建一个Object的类。

接下来,echo显示“YES”。班级存在!

接下来,我将$ klass传递给ReflectionClass并且......

下一个print_r打印:

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

在域名消失之前注意\。可能是问题的一部分吗?

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

致命错误:类名必须是第53行的C:\ Users \ Zack \ PhpstormProjects \ MyApp \ base \ Registry.php中的有效对象或字符串

所以我不知道问题是什么。 Member类存在于域命名空间中。以防万一会员中的某些内容有误,这里是;还没多久:

<?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);
}

1 个答案:

答案 0 :(得分:4)

最后一行中不需要new。它应该是这样的:

return $mapperClass->newInstance();

实际发生了什么,是您获取了Member的实例,然后将该实例作为类名传递给new。所以PHP看到return new {instance of Member},它抱怨对象的实例不是有效的类名。