ど素人から毛を生やす。<延>

ifで分岐させる二つの処理が9割共通する場合

Web > PHP 2020年12月1日(最終更新:3年前)

2020年12月1日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

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は未定義状態になる。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)