0
클래스를 인스턴스화하면서 한 줄에 PHP 마술을하려고하는데 파서가 나를 허용하지 않는 것 같습니다. 예 :PHP의 동적 클래스 생성
class Test{
private $foo;
public function __construct($value){
$this->foo = $value;
}
public function Bar(){ echo $this->foo; }
}
이 분명히 다음과 같이 호출 할 수 있습니다
$c = new Test("Some text");
$c->Bar(); // "Some text"
가 지금은 몇 가지 흥미로운 문자열 조작에서이 인스턴스를하려면이 :
지금$string = "Something_Test";
$s = current(array_slice(explode('_', $string), 1 ,1)); // This gives me $s = "Test";
내가 잘 사용하여 인스턴스화 할 수 :
$c = new $s("Some test text");
$c->Bar(); // "Someme test text"
, 나는, (영리한 방법이 있는지 또는) 내가없는 한 줄이는이 작동 할 수있는 이유를 궁금 해요 : 나뿐만 아니라 변수 변수를 사용하여 시도했다
$c = new $current(array_slice(explode('_', $string), 1 ,1))("Some test text"); //Doesn't work
:
$c = new $$current(array_slice(explode('_', $string), 1 ,1))("Some test text"); //Doesn't work
그리고 나는 괄호 안에 캡슐화하려고했지만 아무 소용이 없습니다. 유스 케이스가 이상하게 보일지는 모르겠지만 실제로 일을하고 실제로 PHP에서 동적 타이핑 매직 중 일부를 사용하는 것은 흥미 롭다.
tl; dr : 클래스를 인스턴스화하기 위해 문자열 반환 값을 사용하고 싶습니다.
우수함! 나는 그것이 가장 가독성이 높은 코드가 아니라는 것에 동의합니다. 이것은 올바른 관심사이지만, 리플렉션을 이해하는 측면에서는 매우 간단합니다. 좁은 용도이기도합니다 (기본적으로 잘 숨겨진 코드 조각으로 특정 라이브러리 주위에 클래스 인스턴스화를 수행하여 해당 라이브러리의 사용법을보다 명확하게 만듭니다). 그것은 짐승처럼 주석을 달고 일하고 있습니다 - 그리고 PHP가 반사 작용을하는 방법을 배웠습니다. 감사! – Dennis