私はここにいくつかのphpコードを取得しました:
<?php
echo 'hello ' . 1 + 2 . '34';
?>
234を出力し、
しかし、「hello」の前に番号11を追加すると、次のようになります。
<?php
echo '11hello ' . 1 + 2 . '34';
?>
245(私が期待していた)ではなく1334を出力しますが、それはなぜですか?
それは奇妙です...
だが
<?php
echo '11hello ' . (1 + 2) . '34';
?>
OR
<?php
echo '11hello ', 1 + 2, '34';
?>
問題を修正しています。
UPDv1:
最終的に適切な答えを得ることができました:
'hello'
= 0
(先頭に数字がないため、PHPはゼロであると想定しています)。
したがって、'hello' . 1 + 2
の先頭の桁がゼロではないため、'hello1' + 2
は2
は'hello1'
に簡略化されます。
'11hello '
= 11
(先頭桁が含まれているため、PHPは11であると想定しています)。
したがって、'11hello ' . 1 + 2
は'11hello 1' + 2
であるため、11 + 2
は13
に簡略化されます。
UPDv2:
http://www.php.net/manual/en/language.types.string.php
値は文字列の最初の部分によって与えられます。文字列が有効な数値データで始まる場合、これが使用される値になります。それ以外の場合、値は0(ゼロ)になります。有効な数値データは、オプションの符号、それに続く1つ以上の数字(オプションで小数点を含む)、それに続くオプションの指数です。指数は、「e」または「E」とそれに続く1つ以上の数字です。
ドット演算子には、+および-と同じ precedence があり、予期しない結果が生じる可能性があります。
これは技術的にあなたの質問に答えます...連結中に数値を数値として扱いたい場合は、括弧で囲んでください。
<?php
echo '11hello ' . (1 + 2) . '34';
?>
数学演算では()
を使用する必要があります
echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334
演算子を間に置くのが嫌いなら、変数に代入してください
$var = 1 + 2;
echo 'hello ' . $var . '34';
PHPタイプ変換テーブルをチェックして、舞台裏で何が起こっているかをよりよく理解する必要があります: http://php.net/manual/en/types.comparisons.php