【问题标题】:Call static function from variable从变量调用静态函数
【发布时间】:2014-01-07 15:43:58
【问题描述】:

我有以下设置:

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

                }
            }

没用。

【问题讨论】:

  • 不重复...在一个类中...如果是单独的我可以使用 call_user_func
  • 尽可能避免静态是个好主意;)
  • 完美...全部...所有答案都可以调用...有关function_exists的任何帮助(不能使用任何sintax)? @Anyone 不是当你真的希望它是静态的;)。
  • 你要使用method_exists();

标签: php class static class-method


【解决方案1】:

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"));
     }
 }

【讨论】:

  • 需要兼容 php 3.0 :(。仍然 +1... 我会接受这个答案,因为它是最完整的。非常非常。
  • PHP 版本 3 没有任何类/对象的概念 - 祝你找到解决方案好运
【解决方案2】:

您应该能够使用以下内容:

test::$somethingElseFunction();

【讨论】:

    【解决方案3】:

    使用此功能:

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

    【讨论】:

    • 不可能。你使用类名作为函数名?
    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2013-01-31
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多