PHPでは、これを実行したいと思います。
switch (function_foo($bar,$bar2)) {
case $fu:
*Do Stuff*
break;
case $fubar:
*Do Other Stuff*
break;
}
これはひどい考えですか?それは機能しますか?
PHPでは、これを実行したいと思います。
switch (function_foo($bar,$bar2)) {
case $fu:
*Do Stuff*
break;
case $fubar:
*Do Other Stuff*
break;
}
これはひどい考えですか?それは機能しますか?
で関数を使用して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
のパラメータとして関数を試したことはありませんがswitch
、よくわかりません(試してみる必要があります)。ただし、最初に関数の戻り値を変数に格納して、次のように使用できますswitch
。
$return_value = function_foo($bar, $bar2);
switch ($return_value) {
case $fu:
*Do Stuff*
break;
case $fubar:
*Do Other Stuff*
break;
}
マニュアルによると、PHPステートメントは一連の/ステートメントswitch
とまったく同じです(すべてのケースがで終わる場合)。それはあなたのテクニックがうまくいくはずだということを意味します。関数名と変数名が読める限り、問題は考えられません。if
else if
break
他のいくつかの言語では、ステートメントは実際には/ステートメントよりswitch
もパフォーマンスが向上しているため、コンパイル時にケース値を知る必要があります。PHPがそのようなことをしているようには見えません。if
else if
その可能性はいとその呼ばれるラムダ、これらは隠された機能です
$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;
}