나는 arg37의 인덱스 배열을 메서드에 전달할 수있는 곳에서 작업하고 있는데, 이는 call_user_func_array
과 매우 유사합니다. 나는 call_user_func_array
을 사용할 것이다. 그러나 그것은 바람직하지 않은 OOP 접근법이 아니며, 메소드가 정적이어야하며, 목표 클래스의 객체 지향을 깨뜨린다.클래스 메서드 호출을 동적으로 호출
나는 ReflectionClass
을 사용하려고했지만 아무 소용이 없습니다. 클래스의 메서드에 대한 인수는 호출 할 수없고 생성자에 대해서만 호출 할 수 있습니다. 불행히도, 이것은 바람직하지 않습니다.
제가 맨 페이지를 가져다가 ReflectionFunction
을 보았습니다.하지만 클래스를 인스턴스화 할 방법이 없으므로 메소드를 가리킨 다음 invokeArgs
을 지정하십시오.
Function (Index())->Index() does not exist
사용 예 ReflectionMethod
$call = new \ReflectionMethod("ExampleClass", "exampleMethod");
$call->invokeArgs(new ExampleClass(), ["argument1", "argument2"]);
print_r($call);
:
$call = new \ReflectionFunction("(ExampleClass())->exampleMethod");
$call->invokeArgs(["argument1", "argument2"]);
이 실패합니다
는예 ReflectionFunction
를 사용하여 (이 질문에 PHP 5.4, 따라서 구문을 태그가 기억) 다음과 함께 실패합니다.
ReflectionMethod Object
(
[name] => Index
[class] => Index
)
인수는 절대로 메서드에 전달되지 않습니다.
원하는 결과는 다음과 같습니다
class ExampleClass() {
public function exampleMethod($exampleArg1, $exampleArg2){
// do something here
echo "Argument 1: {$exampleArg1}\n";
echo "Argument 2: {$exampleArg2}\n";
}
}
$array = [ 'exampleArg1Value', 'exampleArg2Value' ];
내가 ExampleClass->exampleMethod()
의 인스턴스에 $array
을 통과하면, 나는 단지 배열 될 하나 개의 인자를 가질 것이다. 대신, 저는 개별적인 주장을 이끌어 낼 수 있어야합니다.
나는 ReflectorClass
에 ReflectorFunction
을 호출 할 방법이 있다면 나는 배 모양과 도중에 볼 수 있지만 가능하지는 않다고 생각했다.
이전에이 작업을 수행 한 적이있는 사람이 있습니까?
그래, 그냥 작동해야합니다, 당신은 쉽게 여기 PHP 버전에 대해 확인할 수 있습니다 : http://3v4l.org/JUKK9#v547 - 클래스가 다른 네임 스페이스 또는 뭔가에서 조심하세요. – hakre