2014-01-07 137 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);