2010-04-17 75 views
24

是否有可能從調用類函數是這樣的:PHP中的OOP:從一個變量的類函數?

$class = new class; 
$function_name = "do_the_thing"; 
$req = $class->$function_name(); 

東西類似的解決方案,這似乎並沒有工作?

+0

的可能重複的http:/ /stackoverflow.com/questions/936875/how-would-i-call-a-method-from-a-class-with--variable – outis 2010-04-17 06:49:22

回答

50

是的,這是可能的,是知道的變量函數,有look at this.

例從PHP的官方網站:

<?php 
class Foo 
{ 
    function Variable() 
    { 
     $name = 'Bar'; 
     $this->$name(); // This calls the Bar() method 
    } 

    function Bar() 
    { 
     echo "This is Bar"; 
    } 
} 

$foo = new Foo(); 
$funcname = "Variable"; 
$foo->$funcname(); // This calls $foo->Variable() 

?> 

在你的情況,確保函數do_the_thing存在。另外請注意,您在存儲函數的返回值:

$req = $class->$function_name(); 

試試,看看哪些變量$req包含。例如,這應該給你的信息:

print_r($req); // or simple echo as per return value of your function 

注:

變量函數不能用於語言結構,如echo(), print(), unset(), isset(), empty(), include(), require()之類的工作。利用包裝函數將任何這些結構用作可變函數。

+2

對於註釋中給出的信息+1。 – MAS1 2010-04-17 06:26:31

+0

@ MAS1:是的,這非常重要:) – Sarfraz 2010-04-17 06:28:00

+0

謝謝,一個很好的和詳細的答案! :) – 2010-04-17 06:33:09

4

我最簡單的例子是:

$class = new class; 
$function_name = "do_the_thing"; 
$req = $class->${$function_name}(); 

$ {$函數名}是招

用靜態方法也可以工作:

$req = $class::{$function_name}(); 
+1

我得到一個錯誤使用 $ req = $ class - > $ {$ function_name}(); 但是,以下似乎是正確的語法 $ req = $ class - > {$ function_name}(); – Martin 2015-06-12 09:13:49

+0

感謝@Martin的修復。我需要再次檢查代碼的來源,看看爲什麼我有這個錯誤。 – Tudor 2015-06-18 14:58:07

+0

使用變量變量的方法,很好! – Wietse 2015-11-04 10:10:25