-5

重複の可能性:
変数を使用してPHP関数を定義するPHP
で関数名として変数を使用する

条件付き関数呼び出しを実行したいのですが、関数がどうなるかは必ずしもわからないので、長いスイッチになります。

例えば;

$userSelection = "calculator"; /* or "stocks" or whatever widget */

$widget->get_widget($userSelection);

public function __construct($userSelection){

/* pseudo code */
call function $userSelection();

}

public function calculator(){
/* Get Calculator */
}
4

9 に答える 9

1

確かにあります。この機能は変数関数と呼ばれます:

$functionName = "strlen";
$length = $$functionName("Hello world!");

構文は便利ですが、$$var(...)フリー関数でしか機能しません。この方法でクラス メソッドを呼び出したい場合は、call_user_funcorを使用する必要がありますcall_user_func_array(これらの関数は「フリー関数」の場合も処理できます)。

于 2012-08-01T10:35:00.013 に答える
0

それがあなたの言いたいことなら、それは非常に簡単です。

function calculator() {
    echo 'foo';
}

$userSelection = "calculator";

if (function_exists($userSelection)) {
    $userSelection();
}

または、あなたの例のようなクラス内:

    class widget {

        public function __construct($userSelection) {
            echo 'constructed widget<br>';
            if (function_exists($userSelection)) {
                $this->$userSelection();
            }
        }

        public function calculator() {
            echo 'bar';
        }

    }

    $userSelection = "calculator";
    $widget = new widget($userSelection);

または、関数がクラスの一部である場合は、クラスの外から。

    class widget {

        public function calculator() {
            echo 'bar';
        }

    }

    $widget = new widget();
    $userSelection = "calculator";
    $widget->$userSelection();

if/else ステートメントを使用して、有効な関数のみが実行されることを確認するために呼び出される関数を決定します (ユーザーの選択をサニタイズしますか、それとも単に a から取得します$_POSTか?後者は非常に悪い考えです) )。

于 2012-08-01T10:37:07.660 に答える
0

それがあなたが求めている単なる機能である場合、これを使用すると問題が解決するはずです

$function = "echo";
$$function "fooBar";

柔軟に保ちたいクラスメソッドの場合は、魔法のメソッド __call()を使用して、事前定義されていないメソッド名を使用できるようにします。

__call()オブジェクトコンテキストでアクセスできないメソッドを呼び出すときにトリガーされます。

すなわち

class Foo {
    public function __call($name, $arguments) {
        echo $name;
    }
}

$foo = new Foo();
$foo->bar(); // will echo "bar"
于 2012-08-01T10:40:03.617 に答える
0

call_user_func($userSelection);

http://php.net/manual/en/function.call-user-func.php

于 2012-08-01T10:35:35.703 に答える
0

このphp関数を見てください:

call_user_func(): http://php.net/manual/de/function.call-user-func.php

call_user_func_array(): http://www.php.net/manual/de/function.call-user-func-array.php

create_function(): http://www.php.net/manual/de/function.create-function.php

直接の (醜い) 実行構文もあります。

function some_func(args) {...}
$function_name='some_func';
$$function_name(args2);
于 2012-08-01T10:35:51.137 に答える
0

call_user_func()次のように使用できます。

$userSelection = "calculator";
call_user_func($userSelection[, $param1, $param2, ...]);
call_user_func_array($userSelection, $params);
于 2012-08-01T10:36:37.177 に答える
0

PHP 組み込み関数 'eval' はすべてを実行できますが、インジェクションに注意してください。

$var = "somefunction";
eval("$var();");

http://php.net/manual/en/function.eval.php

于 2012-08-01T10:41:30.647 に答える
0

call-user-func関数を見てください。これにより、別の関数を呼び出すことができます。

call_user_func('calculator')
于 2012-08-01T10:35:02.600 に答える
0

次のことができます:

$var = 'abc';

switch ($var) {
  case 'abc':
    $result = $var('test param');
    echo $result;
  break;
 default :
    echo 'default';
 break;
}

function abc($data) {
  return $data;
}
于 2012-08-01T10:45:44.227 に答える