21

鈍器としての PHP

最近、PHP が頻繁にバッシングされていると聞きます。かなりの数のプロジェクトで、非常識な php コード ベースを見てきました。非常に残念なことに、コードを書いたときにその人が幻覚剤を飲んでいたのではないかと思います。ときどき、最初の開発者が何をすべきでないかについてもう少しガイダンスがあれば、コードはどのようになっていただろうかと思います。

しかし、私は、100% OOP で作成された非常によく組織化された PHP プロジェクトをいくつか見てきましたが、それらは「php プログラマー」によって書かれたものではなく、維持するのが楽しいものでした。

私はすべての若手開発者にJava Anti-Patternsへのリンクを提供します。このページの良い点の 1 つは、Java 固有の例です。Java には、よくある間違いを起こしやすい多くの機能があるからです。php の同様のリストを見つけたいと思っていましたが、Google 検索では意味のあるものは何も見つかりませんでした。

開発者が PHP をプログラミングする際に知っておくべきことについて、すでにいくつかの質問がありますが、私は否定的な点に焦点を当てたいと思いました。

PHP でよく見られる避けるべきことは何ですか? また、同じことをより良い方法で行うための一般的な解決策は何ですか?

言及されると思われるがPHP固有ではないいくつかの明白な例:

  • SQL を連結しないでください。準備ステートメントまたは適切なエスケープを使用します。
  • やみくもに PHP を HTML に埋め込まないでください。テンプレート/MVC を使用してください。
  • フィルタリングされていない生のユーザー入力をやみくもに投稿しないでください - XSS攻撃のためにそれをスクラブしてください。
  • すべての POST と GET を手動で解析しようとしないでください。Web フレームワークを使用してください。

以下は、PHP 固有のものと考えられるいくつかの例です。

  • ファイルのインクルード/リンクを必要とする層が多すぎないようにし、条件付きリンクを避けるようにしてください。むしろ、適切な命名規則を持ち、組織と一貫性を保つようにしてください。
  • あなたがそれを助けることができない限り、PHP の生のデータベース API を使用しないでください。代わりに、 ADODBのようなデータベース フレームワークを使用してください。
  • ある場所では変数を文字列に設定し、別の場所ではブール値に設定して、ブール値のテストが意味を成すことを期待して、PHP の動的型付けを過度に使用しないでください。

では、あなたの好きな PHP の禁止事項と、それを正しく行う方法を教えてください。

4

7 に答える 7

16

私はこれに同意しません:

  • やみくもに PHP を HTML に埋め込まないでください。テンプレート/MVC を使用してください。

PHP はテンプレート言語です。MVC を実装するという概念には同意しますが、Web 出力の生成に関してさらに別の DSL を実装する必要がある理由がわかりません。

于 2009-04-27T12:36:28.050 に答える
9

phpファイルの最後に終了「?>」タグを追加すると、誤って空白が出力バッファにプッシュされる可能性があります。PHPインタープリターは、ファイルに終了タグを自動的に追加します。手動で行うのは、多少アンチパターンです。

于 2012-08-15T19:58:31.330 に答える
5
  1. $_GETまたは$_POSTをチェックしてクリーンアップせずに使用しないでください。
  2. 権利の設定方法についてお読みくださいphp.ini
  3. 生の SQL に変数を入れないでください。
  4. フレームワークを使用する場合は、依存関係の少ないものを使用してください。
  5. 過度の一般化を停止します。
  6. コードを php ファイルに配布します。ほとんどの場合、すべてを 1 つにまとめる必要はありませんindex.php
  7. コードを書く前に複雑さを軽減します。
  8. Web アプリケーションであることを尊重してください。( RESTfulになるようにしてください。) デスクトップ アプリケーションではありません。ですから、すべてを に入れるのはやめましょう$_SESSION
  9. コードの 10 行ごとに少なくとも 1 行のコメント行。あなたはそれを一年後に読むでしょう。約束します!
  10. 女の子のようなコード- 読みやすくします。
于 2009-04-27T20:26:22.647 に答える
5

私の現在のペットの不満は、クエリ関数の一貫性のない戻り値の型です。これは、関数を呼び出してクエリを実行し、それが返されるときです。

  1. 一致が見つからない場合は NULL または FALSE または同様のもの
  2. 単一の一致が見つかった場合の一致するオブジェクト/値
  3. 複数の一致が見つかった場合の一致するオブジェクト/値の配列

これにより、戻り値の型を確認し、各ケースに具体的に対処する必要があります。単純に常に 0、1、または n 個の要素を持つ配列を返す方がずっと良いでしょう。

于 2013-10-07T15:04:38.057 に答える
2

私のお気に入りの禁止事項の 1 つは次のとおりです。

$query = 'select * from users where username = ' . $_POST['username'];

それよりももっと恐ろしいことはありますか?

于 2009-04-27T12:42:19.207 に答える
0

お気に入りを含める必要がある場合は、karim79 によって投稿されたものである必要はありません。

$query = 'select * from users where username = ' . $_POST['username'];

PHP の多くの開発者は、構造化された時代にとらわれ続けています。PHP は少し前からクラスとオブジェクトをサポートしていますが、なぜ人々が PHP を html にハードコーディングし続けるのか、テンプレートを使わずに、またはまったく何もしないのか理解できません。

.NET や Java などの他の言語の開発者は、多くの開発者がそのようなプログラミングを続けている場合、その言語を批判する権利を獲得したと思います。PHP は非常に優れた言語であり、非常に柔軟性があり、まだ少し初心者ですが成長していますが、多くの人は理解できず、古い古典的なコピー アンド ペーストを作成して解決したいと考えています。

于 2010-08-14T15:12:31.967 に答える
0
  • SPL を使用する
  • mysql_query や pg_query などを使用する代わりに PDO を使用する
  • ユーザー入力で常にフィルター拡張機能を使用する
于 2010-08-14T15:22:59.167 に答える