どもです。
ifで分岐させる二つの処理の9割が共通する、ということであれば、
if(☆☆){
//共通処理
//☆☆専用の処理
}else if(△△){
//共通処理
//△△専用の処理
}
と書くよりも、
if(☆☆ || △△){
//共通処理
if(☆☆){
//☆☆専用の処理
}else{
//△△専用の処理
}
}
と書きたいけれど、この☆☆と△△が複雑だったり重い処理だったりすると、これを2回繰り返すというのはできればやりたくない。
ので、こうする。
if(($a = function_a()) || ($b = function_b())){
//共通処理
if($a){
//function_a()=true専用の処理
}else{
//function_b()=true専用の処理
}
}
こうすると、$aと$bがそれぞれfunction_a()とfunction_b()の結果になるため、結果の変数をifにかけるとで2回目のifを省略できる。
留意点はふたつ。
ひとつは、それぞれの判定を必ず括弧で囲むこと。
if($a = function_a() || $b = function_b())
としてしまうと、$a = (function_a() || $b = function_b()) として処理されてしまい、
function_a()=false, function_b()=true の場合に $a=true になってしまう。
ふたつ目は、$bを初期化する必要があること。
function_a() がtrueとなった場合にそこでifは終了してしまうので、$bの値を用いる場合は必ずどこかで$bの初期化をしておかなければならない。
でないと、ループ中の処理の場合は前ループの値が引き継がれてしまうし、引き継ぐ値が無ければ$bは未定義状態になる。