我有一個服務器的PHP,我發現一個問題(解決)。問題出在一個字符串中保存的長整數之間進行比較,我不能使用Equal,我必須使用Identical。但是我不知道爲什麼我必須使用它,如果它是字符串之間的比較。PHP比較
我做了一個測試,在本地主機和服務器上得到了兩個不同的結果。
服務器PHP版本:5.3.10-1ubuntu3.10
本地PHP版本:5.6.30-7 + deb.sury.org〜xenial + 1
這裏是MI代碼:
<?php
$a = "1285615000003961035";
$b = "1285615000003961023";
if($a == $b)
{
echo "$a == $b<br>";
}
else
{
echo "$a != $b<br>";
}
if((string)$a == (string)$b)
{
echo "(string)" . (string)$a . " == (string)" . (string)$b . "<br>";
}
else
{
echo "(string)" . (string)$a . " != (string)" . (string)$b . "<br>";
}
if($a === $b)
{
echo "$a === $b<br>";
}
else
{
echo "$a !== $b<br>";
}
if((string)$a === (string)$b)
{
echo "(string)" . (string)$a . " === (string)" . (string)$b . "<br>";
}
else
{
echo "(string)" . (string)$a . " !== (string)" . (string)$b . "<br>";
}
?>
在服務器我得到:
1285615000003961035 == 1285615000003961023
(串)1285615000003961035 ==(串)1285615000003961023
1285615000003961035 == 1285615000003961023
(串)1285615000003961035 ==(串)1285615000003961023
和地方:!
1285615000003961035 = 1285615000003961023
!(string)1285615000003961035!=(string)1285615000003961023
1285615000003961035!== 1285615000003961023
(串)1285615000003961035!==(串)1285615000003961023
我7.0.15-1〜dotdeb + 8.1測試此代碼,這是相同的局部結果。我會說在5.3和5.6之間有所變化。一般來說,精確比較PHP中的大(長)數是一場噩夢,應該不惜一切代價避免。 –
@DmitryPonkin我知道我必須避免它。但是這是必要的,因爲這個大數字是來自外部服務的id,並且我沒有其他選項。 – Pestana