不知道我的问题是否正确,但基本上我想知道的是,是否有更简单(更短)的方式来执行以下操作:
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 );
这样的事吗?我试过这段代码但当然失败了。有什么想法吗?
答案 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);