ログ日記

作業ログと日記とメモ

自分がPHPを使うときの注意点

  • なるべくZend Framework PHP標準コーディング規約を使う
    • アクションクラスとか使い捨てな場合は適当なこともある
  • 内部コードはUTF-8を使う
    • テーブルの表示、javascriptとの連携、などが簡単になるので
  • type hintingを積極的に使う
  • 複雑な配列はなるべくオブジェクトで
  • SQLは全てO/Rマッパーで
    • 複雑なSQLを直接実行するときも、O/Rマッパーのbind機構を使う
  • HTML_Template_Flexyを使う
    • 最近は流行ってない?結構優秀だと思うんだけど
  • 関数が長くなっても分割しない
    • DRYの原則に従う限り、長くなってもかまわない
      • その代わりDRYに違反する処理が含まれた時点でリファクタリングを行う
      • 普段使っているディスプレイが大きいから、まとまっている方が見やすいのかも
  • グローバル変数は使わない
    • 処理はグローバルな場所でたまに行うこともある
  • 定数はなるべくconstに
  • バージョン管理の環境を整える
    • ちょっとした修正を自動的に反映
    • 同じシステムが複数ある場合とか楽ちん
  • 継承は使わない
    • ここは使うべきかなと思っていても度重なる修正でえらいことになる
      • これは自分の力不足なのだが
  • フレームワーク、ライブラリを使うぐらいなら作る
    • いくら使い方が上手くなっても全く自分の力にならない
    • 何より使うだけなのは楽しくない
    • そういうゆとりのある会社にするのが理想だと思う
      • 作った後に「あぁやっぱり既存のものは凄いなぁ」と思って使うのは良い

元はこれ。

* コーディング規約を守る。組織にコーディング規約がないなら、Zend Framework PHP標準コーディング規約 [zend.com]を使う。オレ流コーディングスタイルは禁止。
* 内部コードにはEUC-JPかUTF-8を使う。入出力もできるだけShift JISを避ける。Shift JISを使う場合には2byte目に0x5Cを含む文字の動作を忘れずに確認する。
* 開発環境の警告レベルをE_STRICTにする。本番環境ではdisplay_errorsをオフにする。
* register_globals、magic_quotesはオフにする。
* type hintingを積極的に使う。
* スコープの長い配列をクラスでラップする。
* プレゼンテーションとロジックを分割すること。プレゼンテーションには変数または関数の出力とループ以外のロジックを残さないこと。ロジックの中で直接出力をしないこと。ロジックはSimpleTestを使って単体テストすること。
* SQL文に変数を埋め込むときにはプレースホルダを使う(PDOのprepareとbindParams)。
* リクエストから取得したパラメータを出力するときはhtmlspecialcharsを使う。
* 関数が長くなったら分割する(composite methodパターンを使おう)。
* グローバル変数を使うのは避ける。
* 変数を定数として使わない。定数はdefineで定義するか、const宣言する。
* 常に最新バージョンでテストできる環境を作り、サービスイン後もバージョンアップに対応するための予算をとっておく(サービスイン後にお金をかけたくないなら、PHPは避けるべき)。
* 継承を使うなら、クラス図くらいは書いておく(単にコードを再利用したいだけなら、移譲を検討すること)。
* 各URLにおけるパラメータとその閾値を文書化すること。パラメータの閾値の境界線についてソースレビューし、テストすること。
* 既存のフレームワークを学習することに投資すること(学習コストを嫌って自己流のフレームワークを作ることは、バグを作りこむことになるのでかえってコスト高になる)。
* PHPしか使えない作業者の成果物はこまめにレビューすること。
* 設計を重視すること。
* コピー&ペーストプログラミングの匂いを発見したら、そのコードを書いた人にプログラミングの基礎を教えること。
* リファクタリングの時間をスケジュールに入れること。
* require/includeを条件文や関数宣言の中に記述しないこと。

http://slashdot.jp/askslashdot/comments.pl?sid=389009&cid=1290697
  • 各URLにおけるパラメータとその閾値を文書化すること。パラメータの閾値の境界線についてソースレビューし、テストすること。
  • プレゼンテーションとロジックを分割すること。プレゼンテーションには変数または関数の出力とループ以外のロジックを残さないこと。ロジックの中で直接出力をしないこと。ロジックはSimpleTestを使って単体テストすること。

これは重要だ。
あとで考える。