それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpのリクエストパラメータをサクっと処理する

phpのリクエストを読むのに、ブラケットがめんどくさい

ブラケット書くのがめんどくさい 此の記述がもはや狂気。

<?php

if ( empty($_GET["name"]) ){

}

["name"] を書いて、if ( func( ) ) に加え、 $_GET などと、どれだけ大変なのだ。キーボードの運指が辛い。

かといって、フレームワークのやり方もキレイとは言えるのか?

<?php

$name = Request::input('name', 'default_name');

リクエストをオブジェクトにして取得するのはもう面倒だ。

コレも長過ぎる。そもそも変数名に出来ないところがもうイヤだ。

考えてみた

if のチェックは3項演算子で省略できる。ブラケットとクオート地獄はオブジェクトにキャストしてしまえばいい。さらに、デフォルト値は配列を置換する形式にしておけば、余計な文字列を処理して必要なものだけを取り出せるはずだ。

<?php

if ( $req->name ) {
   echo $req->name
}

こんなふうに書けたら楽なのに。。。

作ってみた。

ポイントは3つ

  1. デフォルト値を尊重する
  2. 配列と配列のマージ・置換処理をする
  3. オブジェクトにキャストする

コレで十分なはずだ。

<?php
$defaults = [
  'limit' => 10,
  'offset' => 0,
  'do_search'=>0,
  'search' => null,
  'station' => null,
  'category_id' => null
];


$req = array_merge($defaults, $_REQUEST);
$req = array_intersect_key($req, $defaults);
$req = (object) $req;

こうしておけば、使うときも楽ですよね

before

<?php 

if(   empty($_GET["limit"]) ||  ($_GET["limit"]) < 0  ){
    $_GET["limit"] = 100;
}
if(   empty($_GET["name"]) ||  strlen($_GET["name"]) < 1  ){
    $_GET["name"] = 'default_name';
}

もう悪夢でしか無い。この記号の多さは。

after

<?php 

$req->limit  = $req->limit >0 ?: 100;
$req->name  = strlen($req->name) >0 ?: 'default_name';

うん、随分楽になる。phpフレームワークさんたちは、これを隠蔽する必要あるのかな・・・