动态调用PHP函数?

时间:2012-02-01 06:09:32

标签: php switch-statement shortcuts

不知道我的问题是否正确,但基本上我想知道的是,是否有更简单(更短)的方式来执行以下操作:

switch( $type ) {
    case 'select': $echo = $this->__jw_select( $args ); break;
    case 'checkbox': $echo = $this->__jw_checkbox( $args ); break;
    case 'radio': $echo = $this->__jw_radio( $args ); break;
    case 'input': $echo = $this->__jw_input( $args ); break;
    case 'textarea': $echo = $this->__jw_textarea( $args ); break;
    default: return null;
}

有什么方法可以做$echo = $this->__jw_{$type}( $args );这样的事吗?我试过这段代码但当然失败了。有什么想法吗?

5 个答案:

答案 0 :(得分:2)

试试这个:

$method = "__jq_$type";
$echo = $this->$method($args);

或者,使用call_user_func

$method = "__jq_$type";
$echo = call_user_func(array($this, $method), $args);

当然,这里没有对方法名称进行验证。

答案 1 :(得分:2)

有很多方法可以做到,这里有一个:

if(method_exists($this, "__jw_$type"))
{
    $echo = $this->{"__jw_$type"}($args);
}

答案 2 :(得分:1)

$action = "__jw__$type";
$this->$action($args);

当然,您确实要验证$type是否为允许类型。

答案 3 :(得分:1)

$field = "__jw_$type";
$echo = $this->{$field}($args);

甚至更简单,

$echo = $this->{"__jw_$type"}($args);

答案 4 :(得分:1)

您可以尝试这样的事情:

$type = '__jw_'.$type;
if(method_exists($type,$this))
   $this->{$type}($args);