ホームページ  >  記事  >  バックエンド開発  >  あなたはphpでいくつの落とし穴に陥ったことがあるでしょうか?

あなたはphpでいくつの落とし穴に陥ったことがあるでしょうか?

WBOY
WBOYオリジナル
2016-06-23 13:40:291065ブラウズ

'abc' == 0 return true

これは数値と文字列の比較であるため、PHP は文字列を数値に変換してから比較します。 PHP の変換規則は、文字列が数字で始まる場合はその先頭の数字を変換結果とし、そうでない場合は 0 を出力します。例: 123abc は変換後 123 になるはずで、abc は 0==0 になります。詳細については、公式マニュアルを参照してください。整数と文字列を比較すると、文字列が変換されます。整数への変換

null null と 0 の 3 つの値の比較

PHP では、== は最初に型変換を実行してから比較しますが、型が異なる場合は === が最初に型を比較します。次の例を参照してください。

    $a = null;    $b = '';    $c = 0;    echo ($a == $b)?1:0;    // 输出1    echo ($a === $b)?1:0;   // 输出0    echo ($a == $c)?1:0;    // 输出1    echo ($a === $c)?1:0;   // 输出0    echo ($b == $c)?1:0;    // 输出1    echo ($b === $c)?1:0;   // 输出0

3. foreach での参照割り当てについては、公式ドキュメントを参照してください。

公式ドキュメントには次の警告があります。 警告 最後の要素の $value 参照配列のは foreach ループ後も保持されます。 unset() を使用して破棄することをお勧めします。

コードのセットを見てみましょう:

rrree

上記のコードの出力は次のとおりです:

1,2,3,1,2,2 最後の出力は 3 ではなく 2 です。 no $item の破棄が原因で、理由は次のとおりです。

最初のループでは、3 の参照が $item に割り当てられ、2 番目のループでは、$item が a であるため、1 が $item に割り当てられます。参照すると、配列の要素 3 が 1 になりました、わかりますか?

4. isset と empty の関係と違い

empty は、次の 8 つの状況で true を返します:

null、空の文字列 ""、文字列 0 "0"、空の配列、ブール値 false、数値 0、浮動小数点数値 0.0、var はクラスで定義されていますが割り当てられていません www.stuhack.com

isset は変数が設定されているかどうかを検出し、NULL ではないですが、空の 8 つのケースでは null のみが false を返し、他の 7 つのケースは戻りますtrue

要約 上で述べたように、empty で説明される 7 つの非 null 状況を除き、他の場合では、if(empty(variable)) は if(!isset(variable))

strrchr 関数

5 と同等です。

W3School サイトのコメントは次のとおりです。

strrchr() 関数は、別の文字列内の文字列の最後の出現箇所を検索し、その位置から文字列の末尾までのすべての文字を返します。

成功した場合は false を返します。

実際には、この関数は文字列を検索するものではなく、公式ドキュメントを参照する必要があります

コード例:

$a = [1,2,3];foreach($a as &$item){    echo $item . ',';}//unset($item); // 引用赋值后不销毁对象foreach($a as $item){    echo $item . ',';}

上記のコードの出力は次のとおりです: .txt

言い換えると、$b が文字列の場合、最初の文字のみが使用され、それ以降の他の文字は無視されます

注: PHP には strstr 関数が用意されていますが、strrstr 関数を提供しない理由は非常に簡単ですが、自分で実装してください


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