当我试图使用反射创建对象并每次都得到此错误时,我似乎无法绕过此错误。
下面是我的代码:
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();
}
第一个回显打印"domainMember"。这是正确的,因为它是我传入的,它是我试图创建对象的类。
接下来,回显打印"YES"。这个类存在!
接下来,我将$ class传递给ReflectionClass和…
下一个print_r打印:
ReflectionClass Object ( [name] => domainMember )
注意 before域消失了。可能是问题的一部分吗?
然后,当我调用newInstance()时,我得到了错误。
致命错误:类名必须是C:UsersZackPhpstormProjectsMyAppbaseRegistry.php中的有效对象或字符串
所以我不知道问题是什么。Member类存在于域命名空间中。以防万一,在Member中有什么是错误的,在这里;还没有:
<?php
namespace domain;
use baseRegistry;
use domainbaseBaseMember;
class Member extends BaseMember {
/**
* @param $displayName
* @return Member
*/
public static function findMemberByDisplayName($displayName) {
return Registry::memberRepository()->findMemberByDisplayName($displayName);
}
最后一行不需要new
。它应该是这样的:
return $mapperClass->newInstance();
实际发生的是,你得到Member的一个实例,然后把这个实例作为类名传递给new。所以PHP看到return new {instance of Member}
,它抱怨对象的实例不是一个有效的类名