2014-01-07 42 views
1

静态函数,我有以下设置:呼叫从可变

class test { 
    public static function something() { 
      $somethingElseFunction = "somethingElse"; 

      // How can I call the method with the name saved in variable? 
    } 

    public static function somethingElse($a) { 
      echo 'bla'; 
    } 
} 

我如何可以调用使用变量的函数? (函数名称在变量中)。 另外我需要为它做一个function_exists()。

尝试这样:

if (function_exists(self::$somethingElseFunction())) { 
       if (!call_user_func(self::$somethingElseFunction , $a)) { 

       } 
      } 

没有工作。

+0

可能重复【如何调用PHP函数从存储在一个字符串变量(http://stackoverflow.com/questions/1005857/how-to-call-php-function-从字符串存储-在-α-变量) –

+0

不重复...在一个类中...如果它是独自一人我可以使用call_user_func – zozo

+0

这是一个好主意,以避免静态,你可以;) –

回答

2

PHP>=5.4你可以只使用self::去参考:

self::$somethingElseFunction(); 

- 但在早期版本中会导致错误(因为不允许使用d动态静态方法去引用)。所以,那么你可以随时使用这样的事情call_user_func_array()

class test { 
    public static function something() { 
      $somethingElseFunction = "somethingElse"; 

     call_user_func_array(array(__CLASS__, $somethingElseFunction), array("bla")); 
    } 

    public static function somethingElse($a) { 
      var_dump($a); 
    } 
} 

test::something(); 

- 这会为PHP>=5.0

关于function_exists()电话的工作 - 它预计字符串参数,因此,我建议使用method_exists() - 因为该功能的目的是做的东西:

public static function something() { 
    $somethingElseFunction = "somethingElse"; 
    if(method_exists(__CLASS__, $somethingElseFunction)) 
    { 
     call_user_func_array(array(__CLASS__, $somethingElseFunction), array("bla")); 
    } 
} 
+0

需要php 3.0兼容:(仍然+1),我会接受这个答案,因为它是最完整的。Ty非常。 – zozo

+0

PHP版本3没有任何类/对象的概念 - 找到解决方案的好运气 – frak

1

您应该能够使用以下命令:

test::$somethingElseFunction(); 
1

使用此功能:

$classname = 'somethingElse'; 
call_user_func('test::' . $classname, $params);