2011-11-09 12 views
7

オリジナルの誤字が1つ入ったコードが見つかりました。TypoがPHPで予期しない結果を生成する

$msg = "Some text"; 
$msg .= " some more text"; 
$msg .+ " yet more text!"; 
$msg .= " last text"; 

お知らせ.=でなければなりません.+。どのような私を驚かすると、コードがされたすべてのエラー、警告または通知を生成して出力することなく、実行されたことである:

Some text some more text last text

それはそれをした理由は、私が思っていました。 .=+=が何であるかがよく分かりますが、等号がないので、特に.+はどう解釈されますか?

答えて

10

.の後に+となるように、.+演算子はありません。

あなたは(原因整数へのキャストにwhich is 0" yet more text!"に単項+を適用した結果と連結$msgで構成されて式を構築する...そしてあなたが何もしていないので、全体を廃棄しています結果。

$msg .+ " yet more text!"; 
$msg . +" yet more text!"; // 1. PHP doesn't care about the spacing 
$msg . 0;     // 2. Conversion to int from unary `+` 
$msg . "0";    // 3. Coersion to string for concatenation 
          // 4. Nothing done with value 

これは完全に有効です。それはただ役に立ちません。

+0

ありがとうございました! – Iznogood

+1

@lznogood:問題ありません! '' hello; "'という表現を単独の文として記述すると、何が起こるかを考える価値があります。それは本当にこの質問の要点です。 –

+0

右!再度、感謝します! – Iznogood

2

+は単項プラスとして解釈されます。 PHPは文字列を値0の整数にキャストし、$msgと連結します。ただし、$msgはその行に何も割り当てないので、$msgは変更されません。

+0

入力いただきありがとうございます! +1! – Iznogood

1

これは、.が連結演算子であり、+が加算演算子であるために機能します。

行は次のように解釈されてしまった:PHPはint型に文字列を変換するとき、それは第一非数で停止として表現+" yet more text!"がint(この場合は0に文字列を変換し

$msg . (+" yet more text!"); 

キャラクター)。その後、0$msgに接続し、結果を無視しました。

+0

入力いただきありがとうございます! +1! – Iznogood

+0

@Iznogood:No prob。 :-) –

関連する問題