2012-08-01 82 views
-5

可能重複:
Use a variable to define a PHP function
Use Variable as Function Name in PHP在PHP中可以調用變量作爲函數嗎?

我想執行條件的函數調用,但我不一定知道函數是什麼什麼,所以這將是一個長開關。

例如;

$userSelection = "calculator"; /* or "stocks" or whatever widget */ 

$widget->get_widget($userSelection); 

public function __construct($userSelection){ 

/* pseudo code */ 
call function $userSelection(); 

} 

public function calculator(){ 
/* Get Calculator */ 
} 
+2

在谷歌搜索 「PHP變量函數」 立即帶來這樣的結果:[PHP變量函數(http://php.net/手動/ EN/functions.variable-的functions.php) – Jocelyn 2012-08-01 10:36:02

回答

1

當然有。此功能稱爲variable functions

$functionName = "strlen"; 
$length = $$functionName("Hello world!"); 

$$var(...)語法是方便,但它只能與自由職能的工作。如果您想以這種方式調用類方法,則需要使用call_user_funccall_user_func_array(這些函數也可以處理「自由函數」情況)。

0

看看call-user-func函數。這使您可以調用另一個功能,例如

call_user_func('calculator') 
0

您可以使用call_user_func()的是,像這樣的:

$userSelection = "calculator"; 
call_user_func($userSelection[, $param1, $param2, ...]); 
call_user_func_array($userSelection, $params); 
0

這是否很簡單這就是你的意思。

function calculator() { 
    echo 'foo'; 
} 

$userSelection = "calculator"; 

if (function_exists($userSelection)) { 
    $userSelection(); 
} 

或者類中像在您的示例:

class widget { 

     public function __construct($userSelection) { 
      echo 'constructed widget<br>'; 
      if (function_exists($userSelection)) { 
       $this->$userSelection(); 
      } 
     } 

     public function calculator() { 
      echo 'bar'; 
     } 

    } 

    $userSelection = "calculator"; 
    $widget = new widget($userSelection); 

或者從當函數是類的部分類之外。

class widget { 

     public function calculator() { 
      echo 'bar'; 
     } 

    } 

    $widget = new widget(); 
    $userSelection = "calculator"; 
    $widget->$userSelection(); 

我會用if/else語句雖然確定功能的工作被稱爲只是爲了確保(你消毒用戶選擇唯一有效的功能被執行或者你只是從$_POST怎麼做呢?後者將是一個非常糟糕的主意)。

0

如果它只是你再使用這應該解決您的問題

$function = "echo"; 
$$function "fooBar"; 

如果它是你要保持靈活運用magic method __call()這將允許您使用的方法名類方法後是一個功能沒有預先定義。當在對象上下文中調用不可訪問的方法時觸發__call()

class Foo { 
    public function __call($name, $arguments) { 
     echo $name; 
    } 
} 

$foo = new Foo(); 
$foo->bar(); // will echo "bar" 
0

你可以做到以下幾點:

$var = 'abc'; 

switch ($var) { 
    case 'abc': 
    $result = $var('test param'); 
    echo $result; 
    break; 
default : 
    echo 'default'; 
break; 
} 

function abc($data) { 
    return $data; 
} 
相關問題