2012-11-21 3 views
1

그것은 할 수 있습니다 :변수 메소드를 호출하기 위해 정의 (또는 클래스 상수)를 사용합니까?

define('DEFAULT_METHOD', 'defaultMethod'); 

class Foo 
{ 
    public function defaultMethod() { } 
} 

$foo = new Foo(); 
$foo->DEFAULT_METHOD(); 

아니면 내가해야합니까 :

$method = DEFAULT_METHOD; 
$foo->$method(); 

그리고 무엇을 대신 정의의 일정 클래스에 대해? 당신은 당신의 예 : 같이 먼저 변수에 설정할 수

+0

왜 상수를? '$ foo-> defaultMethod()'가 더 쉽지 않은가? – shad

+0

나는 그것을 위해 뭔가 할 필요가있다. 사람들이 나를 내 전체 코드를 붙여 넣고 전체 이야기를 설명하기를 원할 것인지는 모르겠다. 그래서 나는 내가 알 필요가있는 것을 설명하기 위해 최소한을 요구했다. – Virus721

답변

3

, 당신은에 넣어해야 중괄호 : 같은 기술은 정적 클래스를 포함하여, 변수 작동

$foo->{DEFAULT_METHOD}(); 

속성 :

,
class Foo { 
    public static $DEFAULT_METHOD = 'defaultMethod'; 
    public function defaultMethod() { echo "Cool!\n"; } 
} 

$foo = new Foo(); 
$foo->{FOO::$DEFAULT_METHOD}(); 

는 사실, 실질적으로 유효한 방법 이름 결과 표현식이 사용될 수있다 :

$foo->{'default'.'Method'}(); 
+0

고마워요! 이걸 몰랐어. 언젠가는 쓸모가 있을지도 모른다. :) 'EDIT' : 클래스 상수로 말하면 :'class Foo {const BAR = 'Baz'; }' – Virus721

+0

위대한 설명! 이것은 우승자처럼 보입니다. – Sean3z

+1

'$ foo -> {Foo :: BAR}();'도 작동합니다. – slashingweapon

2

예 : 메소드 이름과 같은 변수 나 상수를 사용하는 경우 http://codepad.org/69W4dYP1

<?php 
    define('DEFAULT_METHOD', 'defaultMethod'); 

    class Foo { 
     public function defaultMethod() { echo 'yay!'; } 
    } 

    $foo = new Foo(); 
    $method = DEFAULT_METHOD; 
    $foo->$method(); 
?> 
+0

답변 해 주셔서 감사합니다. – Virus721

관련 문제