如何将一个对象函数分配给一个变量?
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)
{
$func = array($obj, 'shout');
}else
{
$func = array($obj, 'whisper');
}
随后:
call_user_func($func);
或:
call_user_func_array($func, $args);
您可以通过名字来称呼方法:
if($var)
{
$func = 'shout';
}else
{
$func = 'whisper';
}
后来:
$obj->$func
您可以
if ($var) {
$fn = 'shout';
} else {
$fn = 'whisper';
}
$obj->$fn();
可以(+1),但这在技术上不是问题所在:-)在Ruby和Python中,它是例如,可能获得“绑定方法”(与对象上下文相关的函数),而C#具有可转换为委托的方法组(在本例中也与对象上下文关联)。 PHP有没有这样的概念? (说,5.3) – 2012-02-02 06:28:06
@pst我认为没有绑定方法的PHP对手 - 我们一直在寻找它。 PHP确实是一种古老的语言,我们只是幸运的,因为程序员可以做很多工作,这很灵活。 – kaz 2012-02-02 06:51:58
@pst:没有。在PHP 5.3发布之前,PHP没有函数对象_at all_,heck,'create_function'仍然返回一个gensym,甚至没有办法为任何类型的已定义函数获取函数对象,更不用说了一种绑定方法。 – duskwuff 2012-02-02 07:22:39
仔细与耳语/喊/等等的参数。你在玩庸医般的鸭子火。 – landons 2012-02-02 06:29:56
@landons我看不出有什么“quacks-like-a-duck”的火,考虑到它(PHP)都是动态输入的...... – 2012-02-02 06:32:06
@landons真的吗?我甚至没有注意到它嘿 – kaz 2012-02-02 06:45:33