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つ
- デフォルト値を尊重する
- 配列と配列のマージ・置換処理をする
- オブジェクトにキャストする
コレで十分なはずだ。
<?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';