2013-06-01 3 views
1

Reflection을 사용하여 객체를 만들고 매번이 오류를 얻으려고하면이 오류를 해결할 수 없습니다.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 Object ([name] => domain\Member) 

\주의 :

다음, 나는 ...

다음 인 print_r 인쇄를 ReflectionClass에 KLASS $ 통과. 문제의 일부일 수 있습니까?

그런 다음 newInstance()를 호출하면 오류가 발생합니다.

치명적인 오류 : 클래스 이름은 유효한 개체 또는 C의 문자열이어야합니다 : \ 사용자 그래서 무슨 문제가 모르는 라인 (53)

에 Registry.php \ 잭 \ PhpstormProjects \ MyApp를 \ 기반을 \ 입니다. 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); 
} 

답변

4

마지막 줄에는 new이 필요하지 않습니다. 대신이 있어야한다 :

실제로 무슨 일
return $mapperClass->newInstance(); 

, 당신은 회원의 인스턴스를 받고 다음 새에 클래스 명으로 해당 인스턴스를 전달하는 것입니다. 그래서 PHP는 return new {instance of Member}을보고 있으며 객체의 인스턴스가 유효한 클래스 이름이 아니라고 불평하고 있습니다.

+0

아, 항상 너무 작습니다 ... – user1513171

관련 문제