답변:
그래 넌 할수있어!
$str = 'One';
$class = 'Class'.$str;
$object = new $class();
네임 스페이스를 사용할 때 정규화 된 이름을 제공하십시오 .
$class = '\Foo\Bar\MyClass';
$instance = new $class();
PHP에서 할 수있는 다른 멋진 것들은 다음과 같습니다.
변수 변수 :
$personCount = 123;
$varname = 'personCount';
echo $$varname; // echo's 123
그리고 가변 함수 및 방법.
$func = 'my_function';
$func('param1'); // calls my_function('param1');
$method = 'doStuff';
$object = new MyClass();
$object->$method(); // calls the MyClass->doStuff() method.
$my_obj = Package\$class_name();
. 대신$class_name = "Package\\" . $class_name; $my_obj = new $class_name();
$className = '\Foo\Bar\MyClass';
$instance = new $className();
$model = $user_model::find()->All();
어디에 $user_model
다음 구문을 사용하여 새 클래스를 만들 수 있습니다 ( 팩토리를 만드는 경우 유용합니다 ).
$className = $whatever;
$object = new $className;
(예외적으로 조잡한) 예제 공장 방법으로 :
public function &factory($className) {
require_once($className . '.php');
if(class_exists($className)) return new $className;
die('Cannot create new "' . $className . '" class - includes not found or class unavailable.');
}
require_once($className.'php');
->require_once($className.'.php');
http://www.php.net/manual/en/language.oop5.basic.php 에서 예제 3을 살펴보십시오 .
$className = 'Foo';
$instance = new $className(); // Foo()
ClassOne
다음과 같이 정의 하자 :
public class ClassOne
{
protected $arg1;
protected $arg2;
//Contructor
public function __construct($arg1, $arg2)
{
$this->arg1 = $arg1;
$this->arg2 = $arg2;
}
public function echoArgOne
{
echo $this->arg1;
}
}
PHP 리플렉션 사용;
$str = "One";
$className = "Class".$str;
$class = new \ReflectionClass($className);
새 인스턴스를 만듭니다.
$instance = $class->newInstanceArgs(["Banana", "Apple")]);
메소드를 호출하십시오.
$instance->echoArgOne();
//prints "Banana"
변수를 메소드로 사용하십시오.
$method = "echoArgOne";
$instance->$method();
//prints "Banana"
원시 문자열을 사용하는 대신 리플렉션을 사용하여 객체를 만들면 객체를보다 잘 제어하고 테스트 할 수 있습니다 (PHPUnit은 리플렉션에 크게 의존 함)