アカウント名:
パスワード:
趣味でやっている人のことは、まあ、いいとして(踏み台にされる可能性はあるけど)、仕事でPHPを使うときの注意を書いておこう。
PHPに限らない話も多いけどね。PHPを採用するときって「期間」「人材」が理由になることが多いけれど、それらの問題を解決できるほどPHPは素晴らしいものではない、ということは知っておいてもいいんじゃないかと。百戦錬磨の腕利きたちがいるとき、期間を短くするためにPHPを使うのはいいでしょう。人材不足でPHPができる人しか揃わないときは、PHPしかないですよね。でもね、両方の場合はプロジェクトを断念する方が間違いないです。未熟なプログラマーでも素早くWebアプリケーションを十分な品質で作れる方法なんかないですから。
# まあ、それはそれとしても、PHPの言語仕様がいろいろトホホなのは確かだけど。
えー? たとえばnumber_format()で得た出力もhtmlspecialchars()を使うの?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
PHPで仕事をするときの注意 (スコア:5, 参考になる)
趣味でやっている人のことは、まあ、いいとして(踏み台にされる可能性はあるけど)、仕事でPHPを使うときの注意を書いておこう。
PHPに限らない話も多いけどね。PHPを採用するときって「期間」「人材」が理由になることが多いけれど、それらの問題を解決できるほどPHPは素晴らしいものではない、ということは知っておいてもいいんじゃないかと。百戦錬磨の腕利きたちがいるとき、期間を短くするためにPHPを使うのはいいでしょう。人材不足でPHPができる人しか揃わないときは、PHPしかないですよね。でもね、両方の場合はプロジェクトを断念する方が間違いないです。未熟なプログラマーでも素早くWebアプリケーションを十分な品質で作れる方法なんかないですから。
# まあ、それはそれとしても、PHPの言語仕様がいろいろトホホなのは確かだけど。
Re:PHPで仕事をするときの注意 (スコア:1, 参考になる)
Re: (スコア:0)
サニタイズですか?
リクエストから取得したパラメータかどうかに関係なく、すべてのテキスト出力するときに「htmlspecialcharsを使う」が鉄則ですよ。
Re:PHPで仕事をするときの注意 (スコア:1)
えー? たとえばnumber_format()で得た出力もhtmlspecialchars()を使うの?
Re: (スコア:0)
Re: (スコア:0)
Re:PHPで仕事をするときの注意 (スコア:1)
関数とのデータの受け渡しに連想配列なんかを使われると地獄。
関数に引き渡すデータを構築するために、実際にその配列が使われている箇所のコードを
精読しないといけなかったり、逆に関数から返される配列の中身を調べるのに苦労したり。
その上、実際にその連想配列を使ったり組み立てたりしているのは、深い深いところにあ
るルーチンだったりして、結局その動作解析に時間を使ってしまったりして。
ドキュメント書けよ...っていうのと同根なんだけど、ドキュメントがあっても複雑さは
消えないんですよね。
クラスだったら、その定義を見ればデータ構造は一目瞭然(の場合が多い)って主張はし
ているんですが、楽なんですよね連想配列は。
いきなり(定義なしに)複雑なデータ構造を組み立てられるから。
# 個人的には、ファイルをまたぐ場合には連想配列は使わないようにしています。
Re:PHPで仕事をするときの注意 (スコア:1)
×。
これは、「リクエストから取得した」と限定をつけて覚えてはいけない。(少数の例外を除き)いかなる場所から取得したデータ(変数)でも、が正しい。たとえ明らかにエスケープが要らない場合でも、コーディング規約とするなら、「必ずエスケープする」、とするべき。必要な場所で忘れないために。
あと、クエリ文字列の場合は urlencode であることも忘れないように。
Re: (スコア:0)
でもC/C++, C#, Java, Perl, Rubyあたりで仕事してる人間です。
が、なんっすかこれ!PHPめっちゃむずかしいじゃないですか。
特に
>Shift JISを使う場合には2byte目に0x5Cを含む文字の動作を忘れずに確認する。
はすごいね。。。
# まぁどの言語でも日本語の取扱いは苦労するもんですけど、、、
Re: (スコア:0)
Re: (スコア:0)
> require/includeを条件文や関数宣言の中に記述しないこと。
コレは時と場合によるんじゃないかなぁ、と。
例えばキャッシュを使う場合は、キャッシュミスの時だけ require する方が効果的で、
それは PEAR の Cache_Lite のドキュメント [php.net]でも推奨されています。
#関係ないんですが、この辺の日本語訳がなんかとても怪しい...
Re: (スコア:0)
ああ。あるある。
「組織が」オレ流コーディングを作っちゃうってのが。
その言語でのベストプラクティスや逆にアンチパターンを
ろくに知りもしないやつに、規約作らせたりするんだよね。
ヘタなコーディング規約休むに似たり。
仰せの通り既存の良いやつを探して使いまわすのが吉。
…でも詳しくない奴は、そういうものが何処に有るのか、どれが良いのか、時としてそれどころか存在に思い至ることすら、困難だったりする。
>関数が長くなったら分割する(composi
Re:PHPで仕事をするときの注意 (スコア:2, 参考になる)
> PHPは知らないのですが、
> 単なる関数分割をCompositePatternと呼ぶのですか?
ケント・ベックの Smalltalk ベストプラクティス・パターン [amazon.co.jp]でそのように紹介されています。
パターンと名前についているが GoF 本のようなデザインパターンではなく、
良いプログラミングスタイルについて書かれたもの。
... だと思います。自分も PHP は知らない。
ruby での例 [biglobe.ne.jp]
comment3, a href="http://afonsodaley.com/images/p (スコア:0)
comment4, a href="http://afonsodaley.com/images/p (スコア:0)
comment2, a href="http://afonsodaley.com/images/p (スコア:0)