6

PHPでは、これを実行したいと思います。

switch (function_foo($bar,$bar2)) {
case $fu:
    *Do Stuff*
    break;
case $fubar:
    *Do Other Stuff*
    break;
}

これはひどい考えですか?それは機能しますか?

4

4 に答える 4

9

で関数を使用してswitchも問題ありません。関数が呼び出され、ケースに使用される値である値が返されます。

それは書くこととまったく同じです:

$my_var = function_foo($bar,$bar2);
switch ($my_var) {
    // ...
}

変数を使用したい場合でも、コードが読みやすくなります。


また、で変数を使用するcaseことは、あまり見かけないことです。しかし、それもうまくいきます;-)

のマニュアルページをswitch引用する:

ケース式は、単純な型、つまり整数または浮動小数点の数値と文字列に評価される任意の式にすることができます。

したがって、単純型の値が含まれている限り、コードは機能し$fuます。$fubar


変数をcase値として使用することはあまりありません(私が読んだコードからわかる限り)、おそらく他のいくつかの言語がそれを許可していないためです(たとえば、Cはそれを許可していません;そしてswitch/case構造が借用されていますCから) ; しかし、それは機能します:

$a = 1;
$b = 2;
switch (1) {
    case $a: echo 'a'; break;
    case $b: echo 'b'; break;
}

出力します:

a
于 2010-03-04T21:25:48.147 に答える
2

のパラメータとして関数を試したことはありませんがswitch、よくわかりません(試してみる必要があります)。ただし、最初に関数の戻り値を変数に格納して、次のように使用できますswitch

$return_value = function_foo($bar, $bar2);

switch ($return_value) {
case $fu:
    *Do Stuff*
    break;
case $fubar:
    *Do Other Stuff*
    break;
}
于 2010-03-04T21:24:18.617 に答える
1

マニュアルによると、PHPステートメントは一連の/ステートメントswitchとまったく同じです(すべてのケースがで終わる場合)。それはあなたのテクニックがうまくいくはずだということを意味します。関数名と変数名が読める限り、問題は考えられません。ifelse ifbreak

他のいくつかの言語では、ステートメントは実際には/ステートメントよりswitchもパフォーマンスが向上しているため、コンパイル時にケース値を知る必要があります。PHPがそのようなことをしているようには見えません。ifelse if

于 2010-03-04T21:25:17.087 に答える
1

その可能性はいとその呼ばれるラムダ、これらは隠された機能です

$lambda = function($a, $b) {
    return $a * $b;
};


$return_value = function foo($bar, $bar2){ return $logic }

switch ($lambda(2,4)) {
case $fu:
    *Do Stuff*
    break;
case $fubar:
    *Do Other Stuff*
    break;
}
于 2010-03-04T21:35:27.377 に答える