ちょっといけてるArrayObjectあたりつかったリクエストクラス考え中
文字コード云々の問題含めてPHPでもrackのrequestクラスみたいなのほしーなーとざっくり考え中。
とりあえず対応したい問題
(1) 文字コードのチェック
(2) nullバイトの削除
(3) isset($_POST)とか書きたくない
大まかにいうとこーいうイメージ(あくまでイメージ
<?php //上書きしちゃう。不正な文字列の場合は例外が出る $_POST = new Holo_Request_ArrayObject($_POST, mb_string_internal_encoding(), Holo_Request_ArrayObject::RESULT_DEFAULTVALUE || Holo_Request_ArrayObject::ERROR_REMOVE_ONRY); //配列に値は入ってないのでfalseを返す assert(isset($_POST['notvalue']) === false); //だけど配列に値がなくてもnoticeとか出力せずなんか返す(デフォルトはnull) assert($_POST['notvalue'] === null); //もちろん設定かえれば $_POST->setDefaultValue('mote'); // "mote"を返す。 assert($_POST['notvalue'] === mote);
一応、(1)(2)(3)を満たしたけど、is_array($_POST)とかしたらfalse返すことに気がつく。
あーまぁそうだよね。これだと今まで動いたフレームワークを強引に書き換えという要件には使えないパターンがでてくるよなーと思った。
<?php //上書きしちゃう。不正な文字列の場合は例外が出る $value = new Holo_Request_ArrayObject($_POST, mb_string_internal_encoding(), Holo_Request_ArrayObject::RESULT_DEFAULTVALUE || Holo_Request_ArrayObject::ERROR_REMOVE_ONRY); $_POST = (array) $value;
で、たぶん(1)(2)は満たせるから、(3)に関しては、自分用として使おうかなと思った。
一応ソース
テストにphptをはじめてつかったけど、いまいち、手になじめてない。
コメントかかないとな。
forkとかpullとか大歓迎。原型とどめないようなやつがみたい。
あとやろうと思ってること
- ちゃんとコメント書く
- requestクラスを書く
- ベンチマーク
- PHP5.3用にするかしないか・・・
- Net_TokyoTyrant整理