- ベストアンサー
phpのクラスについて
- phpのクラスについて学習中の私が、オブジェクト指向を使ってセキュリティやエラー対策をまとめようとしていると、エラーが発生しています。関数では正常に動いていたのですが、クラスのメソッドにするとエラーが出てしまいます。
- 関数であったときは正常に動いていたセキュリティやエラー対策のプログラムを、クラスのメソッドにまとめたいと思っています。しかし、メソッドの引数の受け渡しや結果の受け取りについて、理解が足りていないため、うまくいっていません。
- オブジェクト指向を学ぶために、関数をクラスにまとめようとしていますが、うまくいっていません。クラスを使う必要があるのか、関数のままにしておくべきなのか迷っています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
コーディングミスについては既に指摘があるので… ・htmlspecialcharsに関しては(Smartyなどのテンプレートエンジンを使わない限り)非常に使用頻度が高く、尚且つ「あらかじめエスケープしておく」というのは対策方法として誤っているため、関数「h」のように名称の短い関数として定義しておくことをおすすめします。何度も「HTML::escape」とか「$html->escape」とか書くのはかなり面倒だと思います。 ・filter_inputに関しては、この書き方だと受け取っていないものが未定義のままになってしまうため、実際に送られてくるかどうかは別として、正しいリクエストなら受け取る予定であるキーをあらかじめサーバ側で決めておく必要があります。また、filter_inputは万能ではなく、配列形式のパラメータを処理するのが不得意です。(フレームワーク等を使わない限り)自前でそれなりのコードを書かなければなりません。以下のふたつの関数はクラスメソッドにしておくのもいいと思います。 filter_input_simple http://qiita.com/mpyw/items/5a7242269f51dfabc973 filter_input_array_recursive http://qiita.com/mpyw/items/c39b9ee695a5c2e74627 これらの関数を使って配列構造のバリデーションが終わった後は、1つずつif文を書くなりforeachを使うなりお好きにどうぞ。 フレームワークの使用例を読んでみるのも勉強になるかもしれません。 Symfony - 第2章 - フォームのバリデーション http://symfony.com/legacy/doc/forms/1_2/ja/02-Form-Validation 「こんな風に使えたら便利だな」とか考えながら自分で似たインターフェースを持つクラスを作っていくといろいろ捗ると思います。
その他の回答 (2)
- krokrokro123
- ベストアンサー率13% (3/23)
質問に関係ないところだけどこのクラスってインスタンス作る必要あるのか? staticメソッドで十分な機能だろ。
お礼
ご回答ありがとうございます。 >質問に関係ないところだけどこのクラスってインスタンス作る必要あるのか? >staticメソッドで十分な機能だろ。 はい。確かに仰るとおりですね。 ご指摘ありがとうございました!
- ONEONE
- ベストアンサー率48% (279/575)
オブジェクトを配列として扱っちゃだめ、と書いてあります。 どこを直せばいいかわかるので、エラーは読めるようになりましょう。 とりあえずエラーをなくすには $filtered = $post -> filterPost($_POST); // ここで処理したものを戻り値として変数に持たないといけない。 $email = $filtered ["email "]; とすればいいと思います。 クラスの参考url http://qiita.com/mpyw/items/41230bec5c02142ae691
お礼
ご回答ありがとうございます。 エラーは一応読めたのですが、オブジェクトを配列として扱ってはいけないというところがいまいちわかっていませんでした。 コードのご指摘と参考URLありがとうございます。
お礼
ご回答ありがとうございます。 確かに使用頻度の高い関数の関数名は短くするべきですね。 また、filter_inputのご指摘とフレームワーク学習のお勧めありがとうございます。 参考URL、大変助かります!