PHP8 match を使う

 

 

 

 

PHPで条件分岐する場合、if then else, switch 三項演算子などを使ってましたが、8系に上げたのでmatchを使ってみました。
コードが短くわかりやすくなったのと、一致しない場合エラーになるのでミスが防げるのがメリットかと思います。

< コード例 >

リクエストパラメータの検索種別に応じたSQLをセット


// == リクエストパラメータ == //
$stdt = $_POST["stdt"] ? $_POST["stdt"] : $_GET["stdt"];
$endt = $_POST["endt"] ? $_POST["endt"] : $_GET["endt"];
$tp = $_POST["tp"] ? $_POST["tp"] : $_GET["tp"];


// Ver8.0以上 //
// SQL //
$sql = match ($tp) {
  "PSPO" => SQLStc::$SQL_PSPO,
  "SCP" => SQLStc::$SQL_SCP,
  "MAIL" => SQLStc::$SQL_MAIL,
  "PF" => SQLStc::$SQL_PF,
  "TABLE" => SQLStc::$SQL_TABLE,
  "SCHEMA" => SQLStc::$SQL_SCHEMA,
  "OSINFO" => SQLStc::$SQL_OSINFO,
  "BLFTML" => SQLStc::$SQL_BLFTML,
  "DDAD" => SQLStc::$SQL_DDADHIST,
  "SCPTBL" => SQLStc::$SQL_SCPTBL,
  "SCPTGT" => SQLStc::$SQL_SCPTGT,
  "MAILCHECK" => SQLStc::$SQL_MAILCHECK,
  "BOOK" => SQLStc::$SQL_BOOK,
  "DDADAPSTATS"=> SQLStc::$SQL_DDADAPSTATS,
  "DDADOPESTATS"=> SQLStc::$SQL_DDADOPESTATS,
  "MYSQLPS" => SQLStc::$SQL_MYSQLPS,
  "HTTPDPS" => SQLStc::$SQL_HTTPDPS,
  "PHPFPMPS" => SQLStc::$SQL_PHPFPMPS,
  "TOMCATPS" => SQLStc::$SQL_TOMCATPS,
  "AMPTPS" => SQLStc::$SQL_AMPTPS
};

SQL文クラスにstaticな変数で各設定


class SQLStc {
  
  //const SQL_PSPO_CS = "";
  
  // phpoto data //
  public static $SQL_PSPO = <<<EOM
SELECT
  ID, CNT_PS, CNT_PS_NOIMG, CNT_OS_ALL, CNT_OS_TGT, 
  LEFT(TM_ADD, 16) AS TM_ADD
FROM
  log_photo_count lp
WHERE
  DATE(TM_ADD) BETWEEN :STDT AND :ENDT 
ORDER BY ID DESC	           
          
EOM;

## 以下省略 ##

コメントを残す