2012-04-05 3 views
2

PHP로 다음 작업을 수행 할 수 있습니까?변수가있는 메소드를 호출 할 수 있습니까?

$lstrClassName = 'Class'; 
$lstrMethodName = 'function'; 
$laParameters = array('foo' => 1, 'bar' => 2); 

$this->$lstrClassName->$lstrMethodName($laParameters); 

내가 지금 사용하고이 솔루션은, 그래서 같은 평가와 함께() 함수를 호출하는 것입니다 :이 문제를 해결하기 위해 BETER 방법이 있는지 궁금 해요

eval('$this->'.$lstrClassName.'->'.$lstrMethodName.'($laParameters);'); 

.

감사합니다.

+3

일반적으로 당신이 이것에 의지해야 할 때 당신은 뭔가 잘못하고 있습니다. 무엇을 성취하려고합니까? – NullUserException

+1

같은 클래스에서 다른 메서드를 호출하는 대신 동일한 메서드 이름을 가진 다른 클래스로 개체를 재구성해야합니다. 그런 다음 메서드 이름이 아닌 객체를 전달할 수 있습니다. – rjmunro

+0

'eval()'이 좋은 방법이 아니라는 것을 잘 인식하고 있습니다. 왜 당신이 그것을 사용해야하는지 정확히 알지 못한다면 거의 확실하게 * eval()을 사용하지 않아야한다. * 그리고 * 더 나은 대안을 배제한 것이다. 그러나 더 좋은 대안이 너무 많습니다 ... 그래서 당신은 아마 문자열'eval()'을 사용해서는 안됩니다. – dreftymac

답변

5

있습니다 ... 버전에 따라

class Test { 
    function hello() { 
     echo "Hello "; 
    } 

    function world() { 
     return new Foo(); 
    } 
} 

class Foo { 

    function world() { 
     echo " world" ; 
     return new Bar() ; 
    } 

    function baba() { 

    } 
} 

class Bar { 

    function world($name) { 
     echo $name; 
    } 


} 


$class = "Test"; 
$hello = "hello"; 
$world = "world"; 
$object = new $class(); 
$object->$hello(); 
$object->$world()->$world(); 
$object->$world()->$world()->$world(" baba "); 

출력

Hello World baba 

그리고 PHP 5.4를 사용하고 있다면 내가 당신에게 기능 및 배열보다는 평가에 사용할 수있는 call_user_func_array을 제안 또한 call_user_funchttp://php.net/manual/en/function.call-user-func.php

+0

이것은 작동합니다! 감사! – pascalvgemert

+0

당신은 환영합니다 .... 받아 들일 것을 잊지 마세요 : D – Baba

+0

완료, 고마워요! – pascalvgemert

3

당신은 당신의 코드를 시도 했습니까? 무언가가 효과가 있는지 알아 보는 가장 좋은 방법은 시도하는 것입니다. 만약 당신이 그것을 시도한다면, 그것이 작동한다는 것을 알게 될 것입니다 ($this에는 function이라는 메서드를 정의하는 객체의 인스턴스 인 Class이라는 속성이 있다고 가정합니다).

당신은 그렇게 평가하지 않아도 또한이 개 기능 call_user_func()call_user_func_array()

0

보고 할 수 있습니다 변수

를 선언하지 않고 직접 호출. 구문은 당신이 무엇을 제안 다른, 내가 할 수있는 동안 평가 회피하는 경향이 있다는 사실, 당신은 그것을 사용할 수 있습니다 그러나 : 객체로 전화를 걸려면

, 그냥 그것을 좋아합니까 :

$return=call_user_func_array(array($objInstance, "CLASSMETHOD"), $paramArray);

관련 문제