반응형
문자열로 PHP 클래스 인스턴스 만들기
는 두 수업이 .class ClassOne { }
★★★★★★★★★★★★★★★★★」class ClassTwo {}
다음 중 하나를 선택할 수 있는 문자열이 있습니다."One"
★★★★★★★★★★★★★★★★★」"Two"
.
을을 instead a 를 switch
하다
switch ($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
문자열을 할 수 있는 를 들어, 「」 「」 「」 「」 「」 「」 「」new Class("Class" . $str);
아니, 할 수 있어!
$str = 'One';
$class = 'Class'.$str;
$object = new $class();
네임스페이스를 사용할 경우 완전 수식 이름을 입력합니다.
$class = '\Foo\Bar\MyClass';
$instance = new $class();
할수은 다음과 php 할 른 p p p 른 p 음 음 른 음 음 음 음 음 음 음 。
변수:
$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.
다음 구문을 사용하여 새 클래스를 만들 수 있습니다(팩토리를 만드는 경우 유용합니다).
$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.');
}
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 Reflection 사용;
$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은 리플렉션에 크게 의존함).
언급URL : https://stackoverflow.com/questions/4578335/creating-php-class-instance-with-a-string
반응형
'it-source' 카테고리의 다른 글
LIKE 절을 사용할 때 인덱스 예외를 적용하시겠습니까? (0) | 2022.10.21 |
---|---|
Laravel 웅변 ORM 트랜잭션 (0) | 2022.10.21 |
Facebook은 브라우저의 통합 개발자 도구를 어떻게 비활성화합니까? (0) | 2022.10.21 |
jQuery에서 JSON으로 시리얼화 (0) | 2022.10.21 |
(pymysql.err).OperationError) (2013, '쿼리 중 MySQL 서버에 대한 연결 끊김') (0) | 2022.10.20 |