10

私は自分の PHP コーディングを改善しようとしていますが、生産性を向上させたり、PHP の制限を回避したりするために、他のプログラマーがどのような PHP 固有のテクニックを使用しているのか疑問に思っています。

いくつかの例:

  1. 名前空間を処理するためのクラス命名規則:Part1_Part2_ClassNameファイルへのマップPart1/Part2/ClassName.php

  2. if ( count($arrayName) ) // handles $arrayName being unset or empty

  3. 変数関数名、例えば$func = 'foo'; $func($bar); // calls foo($bar);

4

9 に答える 9

14

最終的には、PHP 固有の事柄に焦点を合わせる前に、まず一般的な優れたプログラミング手法を学ぶことで、PHP を最大限に活用できます。そうは言っても...


楽しみと利益のために自由に応募してください。

  1. foreach ループの反復子。時間を間違えることはほとんどありません。

  2. クラスのオートローディングを中心に設計します。spl_autoload_register()ではなく、使用してください__autoload()。おまけとして、ディレクトリ ツリーを再帰的にスキャンしてから、クラスをより論理的なディレクトリ構造に自由に再編成してください。

  3. どこでもタイプヒント。スカラーにはアサーションを使用します。

    function f(SomeClass $x, array $y, $z) {
        assert(is_bool($z))
    }
    
  4. HTML 以外のものを出力します。

    header('Content-type: text/xml'); // or text/css, application/pdf, or...
    
  5. 例外の使い方を学びます。エラーを例外に変換するエラー ハンドラを記述します。

  6. define()グローバル定数をクラス定数に置き換えます。

  7. DateUnix タイムスタンプを適切なクラスに置き換えます。

  8. 長い関数では、unset()使い終わった変数。


罪悪感を持って使用してください:

  1. 配列のようにオブジェクトのデータ メンバーをループします。彼らが非公開であると宣言されていないことに罪悪感を感じてください。これは、Python や Lisp のような異教の言語ではありません。

  2. 長い文字列を組み立てるには、出力バッファーを使用します。

    ob_start();
    echo "whatever\n";
    debug_print_backtrace();
    $s = ob_get_clean();
    

絶対に必要でない限り避けてください。保守プログラマーと自分自身が本当に嫌いでない限り、おそらく避けてください。

  1. 魔法のメソッド ( __get, __set, __call)

  2. extract()

  3. 構造化配列 -- オブジェクトを使用

于 2008-10-29T03:07:07.217 に答える
10

PHP の経験から、いくつかのことを学びました。いくつか例を挙げると:

  • 常にエラーを出力します。これらは、私の典型的なプロジェクト (開発モード) の最初の 2 行です。
ini_set('display_errors', '1');
error_reporting(E_ALL);
  • automagicを使用しないでください。autoLoad のようなものは、将来あなたを噛むかもしれません。

  • を使用して常に依存クラスを必要としrequire_onceます。そうすれば、依存関係をまっすぐに保つことができます。

  • if(isset($array[$key]))の代わりに使用しif($array[$key])ます。2 つ目は、キーが定義されていない場合に警告を発します。

  • 変数を定義するときは (forサイクルを使用する場合でも)、冗長な名前を付けます ($listIndexの代わりに$j)

  • コメント、コメント、コメント。特定のコード スニペットがわかりにくい場合は、コメントを残してください。後でそれを確認する必要があり、その目的が何であるかを思い出せない場合があります。

それ以外では、クラス、関数、および変数の命名規則は、あなたとあなたのチーム次第です。最近、私はZend Framework の命名規則を使用しています。

また、開発モードでは、わずかなエラー (警告も含む) でエラー ページを出力するエラー ハンドラーを設定し、完全な backtraceを提供します。

于 2008-10-28T13:19:34.250 に答える
5

幸い、名前空間は5.3と6にあります。Path_To_ClassNameイディオムを使用しないことを強くお勧めします。それは厄介なコードを作ります、そしてあなたはあなたのライブラリ構造を決して変えることができません...これまでに。

SPLの自動ロードは素晴らしいです。整理されている場合は、すべてのファイルの先頭にインクルードとリクワイアの典型的な20行のブロックを保存できます。コードライブラリ内で物事を変更することもできます。PHPがそれらのディレクトリからインクルードできる限り、何も壊れません。

===overを自由に使用してください==。例えば:

if (array_search('needle',$array) == false) {
  // it's not there, i think...
}

'needle'がキーゼロにある場合、フォールスネガティブになります。その代わり:

if (array_search('needle',$array) === false) {
  // it's not there!
}

常に正確になります。

于 2008-10-28T13:36:47.930 に答える
5

この質問を参照してください:PHPの隠された機能。本当に便利なPHPのヒントがたくさんあり、その中で最も優れたものがリストの一番上に表示されています。

于 2008-10-28T13:37:21.483 に答える
4

私がPHPで行うことは、PHP固有である傾向があるものがいくつかあります。

  1. 文字列を配列でアセンブルします。

    PHPでは多くの文字列操作にコストがかかるため、私が行う文字列操作の離散数を減らすアルゴリズムを作成する傾向があります。古典的な例は、ループを使用して文字列を作成することです。代わりに、array()から開始し、ループ内で配列の連結を実行します。次に、最後にimplode()します。(これにより、トレーリングコンマの問題も適切に解決されます。)

  2. 配列定数は、名前付きパラメーターを関数に実装するのに便利です。

于 2008-10-29T01:26:26.810 に答える
4
  1. NOTICE を有効にし、本当に厳密なエラー報告が必要な場合。多くのエラーとコードの臭いを防ぎます。ini_set('display_errors', 1); error_reporting(E_ALL && $_STRICT);
  2. グローバル変数に近づかない
  3. できるだけ多くの関数を短くしてください。読みやすく、保守も簡単です。関数全体を画面に表示できるようにする必要がある、または少なくとも、関数内のループと構造の開始と終了の中括弧の両方を画面に表示する必要があると言う人もいます。
  4. ユーザー入力を信用しないでください!
于 2008-10-29T12:17:17.510 に答える
3

さまざまなタイプと===演算子を理解してください。これは、のようないくつかの関数にとって不可欠であり、自分strpos()で使い始めることができreturn falseます。

于 2009-01-17T07:22:39.047 に答える
3

私は過去5年間、PHP(およびMySQL)を使用して開発してきました。ごく最近、私は堅実なjavascriptライブラリ(Dojo )を備えたフレームワーク( Zend )を使い始めましたが、それは私が永遠に働く方法を変えました(良い意味で)。

これを私に思い起こさせたのは、あなたの最初の弾丸でした。Zendフレームワークは、「コントローラー」と「アクション」にアクセスする標準的な方法として、まさにこれを実行します。

さまざまなデータベースでの問題のカプセル化と抽象化に関して、Zend_Dbはこれを非常にうまく行っています。Dojoは、異なるブラウザー間のjavascriptの不整合を解消する優れた仕事をします。

全体として、優れたOOP手法を習得する価値があり、フレームワークを使用する(そして読むこと)ことは、OOPの問題を理解するための非常に実践的な方法です。

使用する価値のあるスタンドアロンツールについては、以下も参照してください。

Smarty(テンプレートエンジン) ADODB(データベースアクセス抽象化)

于 2008-10-28T14:18:14.913 に答える
3

使用する前に変数を宣言してください!

于 2008-10-29T03:35:24.180 に答える