phpのクソソースをクソソースで書き直した例

php IT Tips

phpの条件文は関数のコールバックを使えますよ・・・、CASE文も例外では御座いません(´・ω・`)
だけど、それを知らずにIF文まみれのクソソースをよこされた暁には・・・ね。
以下ソースコードは、公開しても大丈夫なレベルに色々端折りました(´・ω・`)

<?php
class Campaign extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
	}

	public function _remap($mode="index",$param=array())
	{
		switch ($mode)
		{
			// キャンペーンNoがリクエストされた場合
			case is_int($mode):
				// キャンペーンNoのテンプレートがない→404
				// このエラーコード出力は通常モデル化しています
				if (!file_exists("view/Campaign/no/template_".$mode.".html"))
				{
					$data = array(
						"HTTP_Code" => 404,
						"ErrDoc"    => "ご指定のページはありません。"
					);
					$this->load->view("view/Common/error.html",$data);
				}

				// 通常処理
				else
				{
					// No.18 : ツイッターのアクセス数降順にユーザリストを並べ替える
					// 上でSWITCH文かけているから、もっと上手な分岐があるはず(´・ω・`)
					if ($mode == "18")
					{
						$handle = @fopen("controller/Campaign/18/twi_counts","r");
						while ($dump = fgetcsv( $handle )) $twi_data_tmp[] = $dump;
						@fclose($handle);
						
						foreach ($twi_data_tmp as $key=>$val)
						{
							$sort_point[$key] = $val[5];
						}
						
						$data["twi_data"] = array_multisort($sort_point ,SORT_DESC,$twi_data_tmp);
						
						unset($twi_data_tmp,$sort_point);
						
						// その他処理
					}
					// 共通処理として、$modeに沿ったビューを展開
					$this->load->view("view/Campaign/no/template_".$mode.".html",$data);
					
					// 以下キャンペーンNo毎に独自処理を書いていく
				}

				// 以下No以外のキャンペーンに独自処理を書いていく
				break;
			}
			
			// index
			default:
				if ($handle = opendir("view/Campaign/no/"))
				{
					while (false !== ($file = readdir($handle)))
					{
						if ($file !== "." && $file !== "..")
						{
							// テンプレートからNo部分のみ切り抜いて配列化
							$templates[] = str_replace(array("template_",".html"),array(),$file);
						}
					}
				}
				$data["no_list"] = $templates;
				$this->load->view("view/Campaign/index.html",$data);
				break;
		}
	}
}

コメント

タイトルとURLをコピーしました