从变量调用静态函数

时间:2014-01-07 15:43:59

标签: php class static class-method

我有以下设置:

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)) {

                }
            }

没用。

3 个答案:

答案 0 :(得分:2)

PHP>=5.4中,您只能使用self::取消引用:

self::$somethingElseFunction();

- 但在早期版本中会导致错误(因为不允许使用动态静态方法取消引用)。那么你总是可以使用诸如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"));
     }
 }

答案 1 :(得分:1)

您应该可以使用以下内容:

test::$somethingElseFunction();

答案 2 :(得分:1)

使用此功能:

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