如何将对象函数分配给变量?

kaz*_*kaz 6 php

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();
}
Run Code Online (Sandbox Code Playgroud)

我想首先准备函数变量以供以后使用,而不是将条件放在循环中.有可能这样做吗?

dus*_*uff 6

您可以按名称调用方法:

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

$obj->$fn();
Run Code Online (Sandbox Code Playgroud)

  • 是(+1)你可以,但这在技术上不是问题所在:-)在Ruby和Python中,可以获得"绑定方法"(与对象上下文相关联的函数),而C#有方法组例如,可转换为委托(在这种情况下也与对象上下文相关联).PHP有这样的概念吗?(说,5.3) (3认同)

dav*_*nal 4

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

if($var) 
{
    $func = 'shout';
}else
{
    $func = 'whisper';
}
Run Code Online (Sandbox Code Playgroud)

稍后的:

$obj->$func
Run Code Online (Sandbox Code Playgroud)

您还可以使用回调:

if($var)
{
    $func = array($obj, 'shout');
}else
{
    $func = array($obj, 'whisper');
}
Run Code Online (Sandbox Code Playgroud)

之后:

call_user_func($func);
Run Code Online (Sandbox Code Playgroud)

或者:

call_user_func_array($func, $args);
Run Code Online (Sandbox Code Playgroud)