ホームページ >php教程 >php手册 >PHP コーディングのヒント (php ヒント) [最終更新日 2011/04/02]

PHP コーディングのヒント (php ヒント) [最終更新日 2011/04/02]

WBOY
WBOYオリジナル
2016-06-13 12:10:231032ブラウズ

最終更新日: 2011/04/02

1. リストを使用して、エクスプロード後の特定のセグメント値を一度に取得します。
list( , $mid) =explode(';', $string);
2. is_null の代わりに NULL === を使用します。
is_null と NULL === はまったく同じ効果がありますが、関数呼び出しを保存します。

3. ==:
PHP には 2 セットの等価比較演算子 ===/!== と ==/!= があり、==/!= は暗黙的な型変換を行いますが、===/!== は厳密です。 2 つの演算を比較する場合、それらの型が同じで値が等しいかどうか。
変換規則を覚えるのが難しいという事実に加えて、次の点も考慮する必要があります。 === を使用すると、将来のメンテナンスが容易ではなくなります。そうしないと、コードを読む人も「現時点では、このステートメントのこの変数はこの型である!」と安心するでしょう。 🎜>
4. 継続を少なくする/継続しない:
継続はループの先頭に戻り、ループの終わりはループの先頭に戻ります。したがって、適切な構築により、次のことが可能になります。

5. switch/in_array などには注意してください。
switch と in_array はどちらも緩い比較を使用するため、変数の型を比較す​​る必要があります。


コードをコピー コードは次のとおりです:

switch ( $name) {
ケース "ラルエンス":
...
ブレーク;
ケース "イブ":
...
ブレーク; 🎜>
上記のスイッチの場合、$name が数値 0 の場合、同じことが in_array にも当てはまります。
解決策は、切り替える前に変数の型を期待する型に変換することです。 .



コードをコピー

コードは次のとおりです: switch (strval($name)) { case " laruence":

...

break;
case "eve":
...
break;
}



ただし、in_array は、デフォルトの比較方法を変更できる 3 番目のオプションのパラメータを提供します。
6. スイッチは、変数を識別するためにのみ使用されます。
たとえば、次のコード部分の場合:




コードをコピーします

コードは次のとおりです: if($a) { } else if ($b) {

} else if ($c || $d) {

}


これは次のように簡単に書き換えることができます:


コードをコピーします

コードは次のとおりです。 switch (TRUE) { case $a:

break;

case $b:
break; >case $c:
case $d:
break;
}


はい、最初に変数を定義してから使用するとわかりますか? :
未定義の変数を使用すると、定義された変数を使用するよりも 8 倍以上遅くなります。
同様のことがあり、PHP エンジンはまず通常のロジックに従ってこの変数を取得しますが、この変数は存在しません。そのため、PHP エンジンは NOTICE をスローし、未定義の変数を使用するときに従うべきロジックのセクションを入力してから、新しい変数を返す必要があります。
さらに、コードを読み取る観点から、未定義の変数を使用する場合は次のようになります。 「この変数はどこで初期化されているのですか? 前のコードと何か関係がありますか? インクルードされたファイルと何か関係がありますか?」

最後に、標準からプログラミングの観点からは、これも行う必要があります。
8. 3 番目の変数を使用せずに 2 つの変数の値を交換します。
list($a, $b) = array( $b, $a),
しかし、実際にはまだ匿名の一時変数が存在します。整数の場合は、相互演算を使用する方が信頼性が高くなります。



コードをコピーします。

コードは次のとおりです。 :

$a = $a $b; $a = $a - $b; >ただし、 – */精度の低下やオーバーフローが発生しやすいため、XOR を使用することをお勧めします。 9. Floor == 2 つの NOT 演算 (この記事は Skiyo から提供されています)


コードをコピーします

コードは次のとおりです:


echo ~~4.9;
echo Floor(4.9); > 2 つの NOT 演算を使用する速度は基本的にフロアの 3 倍ですが、数値が大きい場合はオーバーフローが発生する可能性があることが 1 つあります:

コードをコピーコードは次のとおりです:


echo ~~9999999999999.99; //276447231
echo Floor(99999999999999.99) //99999999999999


10 .do{ }素晴らしいwhile(0) の使用法 (この記事は Qianfeng によって提供されています)
do{}while(0) には、goto やマクロ定義のコード ブロックを削除するなど、C/C で多くの素晴らしい用途があることがわかっています。

, PHP 同様に、do{}while(0) を使用して賢いアプリケーションを作成することもできますコードをコピーします

コードは次のとおりです。


do{
if(true) {
break;
}
if(true) {
break;
}
} while(false) ;
//
if(true) {
} else if(true) {
} else {
}


11.エラー抑制機能
には次のコードがあります:

コード をコピーすると、コードは次のようになります:


@func();


は次と同等です (PHP 原則の詳細な理解: エラー抑制と埋め込み HTML を参照):

コードをコピー コードは次のとおりです:


$report = error_reporting(0);
error_reporting($report);
さらに、エラー抑制シンボルはいくつかの問題を引き起こす可能性があります。(http://www.jb51.net/article/27022.htm) を参照してください。
最後に、エラー抑制機能もエラーのデバッグが発生するときに問題を引き起こす可能性があります。 🎜>12. 再帰の使用を避けるようにしてください (lazyboy のこの記事)

再帰のパフォーマンスは懸念事項であり、再帰のほとんどは末尾再帰ですが、これは削除できます。 code

コードは次のとおりです。


function f($n) {

if ($n = 0) return 1; return $n * f ($n - 1); } //次のように変更されます: $result = 1;

for ($y = 1; $y $result *= $y;
}


13. time() の代わりに $_SERVER['REQUEST_TIME'] を使用すると、
time() が関数呼び出しを引き起こします。時間の正確な値が高くない場合は、代わりに $ _SERVER['REQUEST_TIME'] を使用すると、はるかに高速になります。
14. for 判定条件での操作は避けてください (この記事はメッセージ内の Anonymous からのものです)。
次のコード:
for($i=0; $ i}
により、ループ内で毎回 strlen が呼び出されます。 for ($i=0, $j=strlen($str); $ i}
15. 正規表現の使用を避けるようにしてください (この記事は次のとおりです)。 from pangyntao)
正規表現は時間がかかるため、正規表現を避け、代わりに次のような直接文字列処理関数を使用してください:



コードをコピー

コードは次のとおりです:


if (preg_match("!^foo_!i", "FoO_")) { }

// 次のように置き換えます: if (!strncasecmp(" foo_", "FoO_", 4)) { } if (preg_match("![a8f9]!", "sometext")) { } // 次のように置き換えます: if (strpbrk(" a8f9", "sometext")) { }

if (preg_match("!string!i", "text")) {}

// 次のように置き換えます:
if (stripos("text", "string") !== false) {}


など
16. 二重引用符で囲まれた変数
とヒアドキュメントは次のとおりです:
echo "$name [2]";
PHP はプログラマの意図が $name であるかどうかを知りません。 "[2]" または $name [2],
したがって、中かっこを追加することをお勧めします:



コードをコピーします

コードは次のとおりです:


echo " {$name}[2]"; echo "${name}[2]";

17. 操作クラス関数の場合、失敗は FALSE を返します。 「操作が失敗しました。」一方、クエリ クラス関数の場合、必要な値が見つからない場合は、「見つからない」ことを意味する NULL を返す必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。