この動作はPHPで正しいですか?
<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats
マイナスは、文字列の「2」ではなく、整数にキャストされた最初の「1」と「-1」に連結されていることを理解しています。
その理由を説明してください。
それを解決するための最良の方法は何ですか?これです?
<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
この動作はPHPで正しいですか?
<?php echo '-' . 1 + 1 . ' crazy cats'; ?>
// Outputs:
0 crazy cats
マイナスは、文字列の「2」ではなく、整数にキャストされた最初の「1」と「-1」に連結されていることを理解しています。
その理由を説明してください。
それを解決するための最良の方法は何ですか?これです?
<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?>
まず第一に、それは正しいです、そしてそれが異なるならそれも正しいでしょう、それはPHP開発者がオペランドの優先順位を定義した方法です。
このシナリオでは、オペランドに優先順位がないため、左から右に読みます
'-' . 1 ==> '-1'
'-1' + 1 ==> 0
(文字列の算術演算は、最初にそれらを数値にキャストしてから、算術演算を実行しようとします)。0 . ' crazy cats' ==> "0 crazy cats"
(数値に対する文字列演算は、それらを文字列にキャストします)。-2匹の狂った猫が必要な場合は、括弧を使用して操作の優先順位を設定できます。
echo '-' . (1 + 1) . ' crazy cats';
echo
echo 'foo', 'bar'
また、エコーする個別のステートメントにアイテムを分離する構成に従います。その場合、連結順序について心配する必要はありません。
だからあなたはそうすることができ<?php echo '-', (1 + 1), ' crazy cats'; ?>
、あなたの猫はネガを気にしません!
あなたの言い回しはオフです。'-'
キャストされていませんが、連結されています。
PHPは、(string) 1
と-1
を整数として扱います。
.
PHPでも同じ優先順位を+/-
持つため、文字列は左から右に読み取ることができます。
上記は次のように言っているのと似ています。
echo '-1' + '1 crazy cats';
必要に応じて、これにより優先順位が回避されます。
printf('-%d crazy cats',1+1);