[英]PHP string number concatenation messed up
我在這里得到了一些 PHP 代碼:
<?php
echo 'hello ' . 1 + 2 . '34';
?>
輸出 234,
但是當我在“你好”之前添加一個數字 11 時:
<?php
echo '11hello ' . 1 + 2 . '34';
?>
它輸出 1334 而不是 245(我期望它)。 這是為什么?
那很奇怪...
但
<?php
echo '11hello ' . (1 + 2) . '34';
?>
要么
<?php
echo '11hello ', 1 + 2, '34';
?>
解決了這個問題。
更新 v1:
我終於設法得到了正確的答案:
'hello'
= 0
(不包含前導數字,因此 PHP 假定它為零)。
所以'hello' . 1 + 2
'hello' . 1 + 2
簡化為'hello1' + 2
is 2
。 因為'hello1'
中沒有任何前導數字,所以它也為零。
'11hello '
= 11
(包含前導數字,因此 PHP 假定它是 11)。
所以'11hello ' . 1 + 2
'11hello ' . 1 + 2
簡化為'11hello 1' + 2
因為11 + 2
是13
。
更新 v2:
從字符串:
該值由字符串的初始部分給出。 如果字符串以有效的數字數據開頭,這將是使用的值。 否則,該值將為 0(零)。 有效的數字數據是一個可選的符號,后跟一個或多個數字(可選地包含小數點),后跟一個可選的指數。 指數是“e”或“E”后跟一位或多位數字。
點運算符與+
和-
具有 相同的優先級,這可能會產生意想不到的結果。
從技術上講,這回答了您的問題……如果您希望在連接期間將數字視為數字,只需將它們括在括號中。
<?php
echo '11hello ' . (1 + 2) . '34';
?>
您必須在數學運算中使用()
:
echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334
您應該檢查PHP 類型轉換表以更好地了解幕后發生的事情。
如果您討厭將運算符放在兩者之間,請將它們分配給一個變量:
$var = 1 + 2;
echo 'hello ' . $var . '34';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.