Php 如何将对象函数指定给变量?

Php 如何将对象函数指定给变量?,php,Php,我想先准备函数变量,以便以后使用,而不是将条件放入循环中。有可能的方法吗?您可以按名称调用方法: class example() { function shout($var) { echo 'shout'.$var; } function whisper($var, $bool) { if($bool) { echo $var; } } } $obj = ne

我想先准备函数变量,以便以后使用,而不是将条件放入循环中。有可能的方法吗?

您可以按名称调用方法:

class example()
{
    function shout($var)
    {
        echo 'shout'.$var;
    }

    function whisper($var, $bool)
    {
        if($bool)
        {
           echo $var;
        }
    }
}

$obj = new example();

if($var) 
{
    $func = $obj->shout();
}else
{
    $func = $obj->whisper();
}

您可以将函数名放入字符串中:

if ($var) {
    $fn = 'shout';
} else {
    $fn = 'whisper';
}

$obj->$fn();
稍后:

if($var) 
{
    $func = 'shout';
}else
{
    $func = 'whisper';
}

您还可以使用回调:

$obj->$func
后来:

if($var)
{
    $func = array($obj, 'shout');
}else
{
    $func = array($obj, 'whisper');
}
或:


是的(+1)您可以,但这在技术上不是问题所要问的:-)在Ruby和Python中,可以获得“绑定方法”(与对象上下文相关联的函数),而C#具有可转换为委托的方法组(在本例中也与对象上下文相关联),例如。PHP有这样的概念吗?(比如说,5.3)@pst我想没有绑定方法的php对应项-我们会的,我一直在寻找它。PHP确实是一种古老的语言,我们很幸运,因为它很灵活,程序员可以做大量的工作。@pst:没有。PHP在PHP5.3发布之前根本没有函数对象——见鬼,
create_function
仍然返回一个gensym——即使使用这些函数,也无法为任何种类的已定义函数获取函数对象,更不用说绑定方法了。@Daskwuff:什么是gensym?我以前从未听说过这个词。生成符号。在本例中,创建了一个函数名为
create_function
的字符串,其模式为“lambda#”。请注意whisper/shout/etc上的参数。您正在玩类似鸭子的庸医火。@landons我看不出有任何类似鸭子的庸医火(PHP)所有的都是动态输入的…@landons真的吗?我甚至都没注意到hehe@pst:非常正确。我更想暗示的是,如果这种方法随着时间的推移变得越来越复杂,那么调试会有多困难。让对象类成为动态部分似乎更好,并且总是调用相同的方法。通过这种方式,您可以强制执行这样的想法,即被调用的方法需要特定的上下文、参数等@notJim,哪个更适合使用?@pst:这是一个回调,根据@卡兹:不管怎样,我都没有强烈的意见。我通常使用
$obj->$func
一个,除非我需要将它传递给其他函数。@notJim这对我来说有点言过其实:我想我应该强调它(第二种方法)是“按名称调用方法的信息元组”,而不是一级值(或回调函数):)
call_user_func($func);
call_user_func_array($func, $args);