2012-09-15 57 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,真的很有帮助,谢谢 –

相关问题