2013-05-03 79 views
0

我有下面這段代碼字符串變量的使用內容調用函數

copy($source, $target); 

我也用

move_uploaded_file($source, $target); 

爲了防止代碼的重用,我想通過複製和通過move_uploaded_file在變量。

如果我的變量是$var = "copy";,簡單地把$var($source, $target);,似乎沒有工作。

是否必須圍繞$var任何特殊字符?

謝謝。

+0

如果它不能正常工作,那麼它有什麼作用?錯誤?警告?沒有? – 2013-05-03 13:39:59

+0

「爲了防止代碼重用」 - 你確定這就是你的意思?;) – nickb 2013-05-03 13:42:05

+0

@nickb - 我對圖片上傳使用2/3次相同的函數,但最終調用函數必須移動圖片而不是複製它。 – sark9012 2013-05-03 13:53:23

回答

9

正確的語法是$varvariable functions),因此您的代碼應工作。

但請不要做,只是寫在一個簡單的和可讀的方式代碼。有這種技術的合法用例,但這不是其中之一。

0

您可以使用call_user_func做到這一點。

$result = call_user_func($functionToCall, $source, $target) 

文檔:PHP: call_user_func

1

你想看看Variable Functions該繼續解釋如何做到這一點。

function foo() { 
    echo "In foo()<br />\n"; 
} 
$bar = 'foo'; 
$bar(); //this calls foo() 

這也可以在對象方法和靜態方法上完成。

對象的方法

class Foo 
{ 
    function MyFunction() 
    { 
     //code here 
    } 
} 

$foo = new Foo(); 
$funcName = "MyFunction"; 
$foo->$funcName(); 

靜態方法

class Bar 
{ 
    static function MyStaticFunction() 
    { 
     //code here 
    } 
} 

$funcName = "MyStaticFunction"; 
Bar::$funcName(); 

儘管也許不是在你的情況的情況下,與功能動態類似這樣的問題時,一定要檢查是否是很重要的function actually exists和/或is callable

可選擇使用變量函數,你可以使用call_user_func它將調用基於字符串的名稱,並提供參數的功能。

相關問題