遊星ゲームズ
FrontPage | RSS


PHPで仕事をするときの注意点
 日記

 いってることはほとんど正しいと思うけど、これは「PHPで仕事をするときの注意点」じゃないな。
 フレームワークとかクラスとか、そんな話が出てきてる時点ですでに少しレベルが違うと思った(orz)。

 注意すべき項目を挙げておこう。

register_globals、magic_quotesはオフにする。

 たしかに、内容を知ってればなにをさしおいてもオフにすべき。まともな神経の持ち主ならオンにはできないはず。だが、オンになってる環境がどんだけあるか……。

プレゼンテーションとロジックを分割すること。プレゼンテーションには変数または関数の出力とループ以外のロジックを残さないこと。ロジックの中で直接出力をしないこと。ロジックはSimpleTestを使って単体テストすること。

 プレゼンテーションとロジックの境界線がどこにあるのかを明確に判断できる技術者はほとんどいない。だから現実には、いっそのことプレゼンテーション層を省略したほうがまだマシというケースが多い。個人的には、それでかまわないと思う。
 DB更新処理はともかく、コード名称取得処理とかは本当にビジネスロジック層でやるべきことか? とか個人的にも疑問があるし。
 SimpleTestはもちろん絶対使ったほうがいい(となると前の文章と矛盾するけど(笑))。でも現実には、小さめのWEBサイト開発の〆切はアホみたいに早いうえ仕様変更が多すぎてその暇がない。

 あと思うんだが。
 ビジネスロジック層とプレゼンテーション層を分離しろという人はたくさんいるのに、データアクセス層を分離しろという人が少ないのはなんで?
 そっちのほうが明確に分離できるしメリットも大きい気がするんだが。

リクエストから取得したパラメータを出力するときはhtmlspecialcharsを使う。

 コメントにもあるようだけど。リクエストに限っちゃダメ。表示するときはあらゆる値をほぼ例外なくhtmlspecialcharsしていい。そうできないなら、設計に問題があると思う。
 あと、URLはurlencodeだけど、これもhtmlの中に表示するならhtmlspecialchars。aタグのhrefとかでもそう。

グローバル変数を使うのは避ける。
変数を定数として使わない。定数はdefineで定義するか、const宣言する。

 defineにもconstにも、スカラーしか入らない。また特にconstは、動的な記述を一切受けつけないのでけっこう厳しかったりする。

require/includeを条件文や関数宣言の中に記述しないこと。

 たしかに、とんでもないところに別ファイルを読みこんでひどいことする人はけっこういるんだけど(笑)。
 たとえば既存のテンプレートエンジンを使わない場合とか、includeを関数内に書くしかない。(fopenしてevalならいいという話でもなかろう)
 そんなわけで認めるべき例外もいくつかはあると思う。
 requireは論外。


PHPで仕事をするときの注意点を