2012-07-19 20 views
6

PHPではこの動作は正しいですか?PHP型キャストの優先度

​​

は私はマイナスが最初の「1」と「-1」整数にキャストに連結されて理解されず「2」の文字列です。

理由を説明してください。

これを解決する最善の方法は何ですか? これは?

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?> 
+0

...そう+1 – Louis

答えて

1

ご希望の場合は、これが優先回避:

これはだまされやすい人ではない驚きまし
printf('-%d crazy cats',1+1); 
6

まず第一に、正しいことですが、それが違う場合でも正しいでしょう、それはPHP開発者がオペランドの優先順位を定義した方法です。このシナリオでは
、何のオペランドが優先されないので、uはそれが(文字列の算術演算は、最初の数字にそれらをキャストして、算術演算を実行しようとします)右

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0に左読みください。
  3. 0 . ' crazy cats' ==> "0 crazy cats"(数字に対する文字列操作は、文字列にキャストします)。
+2

なんてこった、あなたは私が:)ところで、演算子の優先順位がathttp利用可能であるよりも速かった:// php.net/manual/en/language.operators.precedence.php。 –

1

あなたの言葉はオフです。 '-'はキャストされていませんが連結されていません。

PHPはまだ(string) 1-1を整数として扱います。

.および+/-は、PHPで同じ優先順位を持ちます。したがって、文字列は左から右に読むことができます。

echo '-1' + '1 crazy cats'; 
+0

マイナスはもちろんキャストされていません、問題を修正しました。 – Paker

4

あなたは-2狂気の猫をしたい場合、あなたは括弧で操作する優先順位を設定することができます:

上記言うと似て

echo '-' . (1 + 1) . ' crazy cats'; 
3

echoecho 'foo', 'bar'いるの構造を次の項目を別々のステートメントに分けてエコーします。その場合、連結順序を心配する必要はありません。

あなたは<?php echo '-', (1 + 1), ' crazy cats'; ?>を行うことができ、あなたのネコはネガを気にしません!