2016-12-20 3 views
-2

필자는 클래스의 외부 및 내부 인스턴스를 덮어 쓰지 않고 다시 작성할 수있는 Dependency Injection 팩토리 클래스를 작성합니다.문자열의 인스턴스 인 객체를 반환합니다.

if($nsp instanceof $obj) 
{ 
    return $obj::getInstance(); 
} 

그것은 항상 false를 반환 내가 지금처럼 네임 스페이스를 참조하는 개체에 instanceof를 호출 할 때

내가 가진 문제이다. 예를 들어, \App\Com 네임 스페이스 안에 Test 개체가 있으면 여전히 false를 반환합니다. (See it working properly here)

위의 링크를 방문 할 수없는 경우 미리 인스턴스화 된 개체 배열을 보유하고있는 protected $_case이 있습니다.

public function using($nsp) 
{ 
    foreach($this->_case as $obj) 
    { 
     if($nsp instanceof $obj) 
     { 
      return $obj::getInstance(); 
     } 
    } 
    throw new \Exception("Call to $nsp did not match any libraries."); 
} 

을 그리고 다음과 같이 사용/호출 할 수 있습니다 : 다음 방법은 다음과 같습니다

Service::getInstance()->using('SomeNamespace\SomeObject'); 

어떤 도움을 크게 감상 할 수는 documentation이 개념을 더 깊이 설명합니다.

+0

다운 투표? 이 질문에 투표를하는 것보다 오히려 잘못 질문하는 방법을 설명하십시오. – KDOT

+0

'$ obj'는 클래스의 * 인스턴스 *입니다 (모든 클래스가 될 수 있습니다).'$ nsp'는'\ App \ Com \ Foo'처럼 * 네임 스페이스 *와 * 클래스 이름 *을 포함하는 문자열입니다. 기본적으로 해당 문자열을 사용하여 객체 배열을 검사하고 해당 인스턴스를 반환합니다. @deceze [무엇을 의미합니까?] (https://3v4l.org/knhjm) – KDOT

답변

1

귀하의 시험이 아래로 비등 :

'SomeNamespace\SomeObject' instanceof $someObj 

글쎄, 문자열이 클래스의 인스턴스 적이 없다. 당신이 뒤로 피연산자를 가지고 있고, 당신이 원하는 것은 나타납니다

if ($obj instanceof $nsp) 
+0

감사합니다. 저는 여러 해 동안 이것을 검색했습니다. 어쩌면 나는 단지 그들 중 하나가 멍청한 날을 보내고있다, 정말 고마워! – KDOT

1

그것의 주위에 다른 방법 :

if ($obj instanceof $nsp)