Вызов PHP-функций динамически? - PullRequest
0 голосов
/ 01 февраля 2012

Не знаю, правильно ли я сформулировал вопрос, но в основном я хочу знать, есть ли более простой (более короткий) способ сделать следующее:

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 ]

2 голосов
/ 01 февраля 2012

Есть много способов сделать это, вот один:

if(method_exists($this, "__jw_$type"))
{
    $echo = $this->{"__jw_$type"}($args);
}
2 голосов
/ 01 февраля 2012

Попробуйте это:

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

В качестве альтернативы используйте call_user_func:

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

Конечно, здесь нет проверки имени метода.

1 голос
/ 01 февраля 2012

Вы можете попробовать что-то вроде этого:

$type = '__jw_'.$type;
if(method_exists($type,$this))
   $this->{$type}($args);
1 голос
/ 01 февраля 2012
$field = "__jw_$type";
$echo = $this->{$field}($args);

или даже проще,

$echo = $this->{"__jw_$type"}($args);
1 голос
/ 01 февраля 2012
$action = "__jw__$type";
$this->$action($args);

Конечно, вы действительно хотите убедиться, что $type является разрешенным типом.

...