2012-09-15 76 views
1

我想在PHP中創建一個函數並在不知道函數名的情況下調用它。調用函數時不知道名字

這可能嗎?

例子:

<?php 

    $functionName = "someName"; 
    $this->$functionName(); 
    function someName(){ 
     echo("Print Message"); 
    } 
?> 
+0

你有沒有試過看? – andrewsi

+0

'不知道函數的名字'? – xdazz

回答

3

它看起來像你想call_user_func()

$functionName = "someName"; 
call_user_func($functionName); //calls `someName()` 

可以使用類似下面的其中輸出是印刷消息 「你好,世界!」:

function someName($val){ 
    return $val; 
} 

$functionName = "someName"; 
echo call_user_func($functionName, "Hello, World!"); 

http://ideone.com/Kw5jp

注:如果您在使用新版本的PHP,你也可以使用@J.Bruni指出的可加密:

$functionName = "someName"; 
$functionName(); //also calls `someName()` 
+0

我試了兩種選擇,兩種作品都非常有用,謝謝 –

+0

使用帖子旁邊的複選標記來選擇答案 – jeremy

+0

「可馴化」並不是什麼新鮮事。它們可用很長時間。自PHP 4.0.6起,「is_callable」函數可用。事實是,新的「可卡因」文檔頁面比以前嚴重得多...我在回答鏈接後粘貼了這個不愉快的驚喜......我想鏈接的頁面不再存在了! –

2

call_user_func()解決您的問題!

$function = 'myOwnFunction'; 
call_user_func($functionname); 

,並避免致命的錯誤,你

function_exists($function); 

吧!

+0

@nile和你的答案沒有區別 –

+0

只有我和尼羅河之間有區別,他似乎比我更快類型^^ – Tom

+0

酷比+1爲你的努力 –

3

是的,這很簡單:

$functionName(); 

然而,你還有其他幾個選項,允許更多複雜的東西。請檢查:

http://php.net/manual/en/language.types.callable.php

的例子集合:

function test() { echo 'hello 1'; } 
class Something { function test() { echo 'hello 2'; } } 
class Other { static function test() { echo 'hello 3'; } } 

$functionName = 'test'; 
$object = new Something(); 
$className = 'Other'; 

// three ways to call function "test", showing how to pass parameters 
$functionName($param1, $param2); 
call_user_func($functionName, $param1, $param2); 
call_user_func_array($functionName, array($param1, $param2)); 

// two ways to call "Something::test" 
$object->$functionName(); 
call_user_func(array($object, $functionName)); 

// a way to call "Other::test" 
call_user_func(array($className, $functionName)); 

重要:你需要之前聲明函數調用它。 (在你的問題,你後聲明函數試圖調用它。這是行不通的。)

爲了避免錯誤,你可以使用函數is_callable覈實,如果一個函數/方法之前實際上是調用稱它。

+0

這是最好的方法imo。對於這種情況,沒有理由使用'call_user_func',儘管你應該使用'function_exists'來檢查函數的存在。 –

+0

是的,當然。你當然不需要**'call_user_func'來查詢所要求的內容。在幾種情況下它可能很有用,但是當然你可以使用一個字符串變量來調用一個函數而不用它。 –

+0

我嘗試了兩種選擇,這兩種作品,你和@Nile,真的很有幫助,謝謝 –

相關問題