it-source

문자열로 PHP 클래스 인스턴스 만들기

criticalcode 2022. 10. 21. 22:43
반응형

문자열로 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

반응형