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);