네임 스페이스를 사용하여 동적 개체를 만드는 데 문제가 있습니다. 내가 가진 클래스 Bar
의 개체를 만들려고 해요, 지금
namespace Foo
{
class Bar
{
}
}
:
include('namespace.php');
$sName = 'Bar';
$sClass = '\\Foo\\'.$sName;
$rObj = new $sClass; //correct object
을하고 모든 것을 잘가는 다음은 네임 스페이스 코드입니다.
include('namespace.php');
use Foo as Baz;
$sName = 'Bar';
$sClass0= '\\Foo\\'.$sName;
$sClass1= '\\Baz\\'.$sName;
$rObj = new $sClass0; //correct object
$rObj = new $sClass1; //Fatal error
그리고 (이름은 여전히 잘 작동을 통해 및 접근) 나는 물체 등의 방법을 인스턴스화 할 수없는 해요 :하지만, 지금은 같은 별명과 일을 뭔가를 사용하고 싶습니다. 내 질문은 - 어떻게 든 별칭을 통해 클래스에 액세스 할 수 있습니까? 그렇다면 어떻게해야합니까? $sClass1='Baz\\'.$sName
을 사용할 때도 액세스하려고 시도했지만 성공하지 못했습니다. 또한, get_declared_classes()
함수를 통해 선언 된 클래스를 검사했습니다.이 클래스는 \Foo\Bar
클래스 (별칭에 대한 참조 없음) 만 있음을 보여줍니다.
중요한지 확실하지 않지만 PHP 5.5 버전을 사용하고 있습니다.
같은 대답을 원하면 별칭이 컴파일 시간입니다. 변수와 클래스 이름은 런타임이기 때문에 클래스 이름 문자열을 일부 작성자/팩토리 함수/메소드를 통해 대체하는 것과 같은 자체 런타임 별칭이 필요합니다. – hakre
이 시점에서 나는 앨리어싱의 아키텍처를 오해했습니다. –
@hakre 매뉴얼의 발췌 부분을 추가했습니다. –