web-dev-qa-db-ja.com

乱れたphp文字列番号の連結

私はここにいくつかのphpコードを取得しました:

<?php
echo 'hello ' . 1 + 2 . '34';
?> 

234を出力し、

しかし、「hello」の前に番号11を追加すると、次のようになります。

<?php
echo '11hello ' . 1 + 2 . '34';
?> 

245(私が期待していた)ではなく1334を出力しますが、それはなぜですか?

13
JustinHo

それは奇妙です...

だが

<?php
echo '11hello ' . (1 + 2) . '34';
?>

OR

<?php
echo '11hello ', 1 + 2, '34';
?>

問題を修正しています。


UPDv1:

最終的に適切な答えを得ることができました:

'hello' = 0(先頭に数字がないため、PHPはゼロであると想定しています)。

したがって、'hello' . 1 + 2の先頭の桁がゼロではないため、'hello1' + 22'hello1'に簡略化されます。


'11hello ' = 11(先頭桁が含まれているため、PHPは11であると想定しています)。

したがって、'11hello ' . 1 + 2'11hello 1' + 2であるため、11 + 213に簡略化されます。


UPDv2:

http://www.php.net/manual/en/language.types.string.php

値は文字列の最初の部分によって与えられます。文字列が有効な数値データで始まる場合、これが使用される値になります。それ以外の場合、値は0(ゼロ)になります。有効な数値データは、オプションの符号、それに続く1つ以上の数字(オプションで小数点を含む)、それに続くオプションの指数です。指数は、「e」または「E」とそれに続く1つ以上の数字です。

15
BlitZ

ドット演算子には、+および-と同じ precedence があり、予期しない結果が生じる可能性があります。

これは技術的にあなたの質問に答えます...連結中に数値を数値として扱いたい場合は、括弧で囲んでください。

<?php
echo '11hello ' . (1 + 2) . '34';
?>
5

数学演算では()を使用する必要があります

echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334
5
Yogesh Suthar

演算子を間に置くのが嫌いなら、変数に代入してください

$var = 1 + 2;

echo 'hello ' . $var . '34';
1
chandresh_cool

PHPタイプ変換テーブルをチェックして、舞台裏で何が起こっているかをよりよく理解する必要があります: http://php.net/manual/en/types.comparisons.php

1
kav