2016-08-21 1 views
0

다음은 인스턴스가 생성 된 문자열을 사용하여 문자열이 전달되는 메서드입니다. 예 방법 : 내가 수동으로 클래스 이름을 작성하거나 수동으로 공간이 방법 $actionType = __namespace__ . "\\$actionType";을 추가하지만클래스 이름을 문자열로 전달하려고 할 때, 네임 스페이스 문제

public function action($actionType) 
{ 
    //var_dump(new $actionType); 

    if (!class_exists($actionType)) { 
     //throw new Exception 

    } 

    if (!(new $actionType) instanceof ActionInterface) { 
     ////throw new Exception 
    } 
    $actionType = new $actionType; 
    echo $actionType->doAction(); 
} 

하지만 발견되지 클래스의 오류를 얻고있다가, 다음 오류가 간다. 왜 그런 일이 일어나는거야?

+1

에 한번 새로운 $의 actionType를 대체 할; 새로운 $ actionType(); – stweb

+0

@stweb은 괄호없이 클래스의 인스턴스를 생성하지 않고 생성자에 매개 변수를 전달하지 않습니다. – feareoc

+0

또한 두 인스턴스를 생성하지 않으려면 if 문 사이에'$ actionType = new $ actionType; '을 넣겠습니다. 마지막 if 문에서 다음을 수행합니다. if (! $ actionType instanceof ActionInterface) {}' – feareoc

답변

0

이 시도 :

public function action($actionType) { 
    //var_dump(new $actionType); 
    if (!class_exists($actionType)) { 
     //throw new Exception 
    } 
    $actionType = new $actionType; 
    if (!($actionType instanceof ActionInterface)) { 
     ////throw new Exception 
    } 

    echo $actionType->doAction(); 
} 
+0

이것은 어떤 차이도 없습니다. – harry123