6

この動作はPHPで正しいですか?

<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats

マイナスは、文字列の「2」ではなく、整数にキャストされた最初の「1」と「-1」に連結されていることを理解しています。

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

それを解決するための最良の方法は何ですか?これです?

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

5 に答える 5

6

まず第一に、それは正しいです、そしてそれが異なるならそれも正しいでしょう、それはPHP開発者がオペランドの優先順位を定義した方法です。
このシナリオでは、オペランドに優先順位がないため、左から右に読みます

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0(文字列の算術演算は、最初にそれらを数値にキャストしてから、算術演算を実行しようとします)。
  3. 0 . ' crazy cats' ==> "0 crazy cats"(数値に対する文字列演算は、それらを文字列にキャストします)。
于 2012-07-19T01:52:39.023 に答える
4

-2匹の狂った猫が必要な場合は、括弧を使用して操作の優先順位を設定できます。

echo '-' . (1 + 1) . ' crazy cats';
于 2012-07-19T01:54:49.213 に答える
3

echoecho 'foo', 'bar'また、エコーする個別のステートメントにアイテムを分離する構成に従います。その場合、連結順序について心配する必要はありません。

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

于 2012-07-19T02:28:36.540 に答える
1

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

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

.PHPでも同じ優先順位を+/-持つため、文字列は左から右に読み取ることができます。

上記は次のように言っているのと似ています。

echo '-1' + '1 crazy cats';
于 2012-07-19T01:53:59.037 に答える
1

必要に応じて、これにより優先順位が回避されます。

printf('-%d crazy cats',1+1);
于 2012-07-19T03:09:38.030 に答える