2015-07-10 2 views
0

Почему следующие сравнения строк возвращают true?Сравнение строк PHP возвращает true, если они не соответствуют

Я использую Laravel framework 4.2, форма :: select сравнивает значение параметра с помощью этого метода и находит совпадения, которых не должно быть.

public function testStringComparison1() 
    { 
    $value = '8000003E-1408739159'; 
    $selected = '8000010E-1434656519'; 
    $b = false; 
    if ((string) $value == (string) $selected) { 
     $b = true; 
    } 
    $this->assertFalse($b); // this fails, $b == true 
    } 

    public function testStringComparison2() 
    { 
    $value = '8000008E-1408740949'; 
    $selected = '8000010E-1434656519'; 
    $b = false; 
    if ((string) $value == (string) $selected) { 
     $b = true; 
    } 
    $this->assertFalse($b); // this fails, $b == true 
    } 
+4

Всегда набирайте жонглирование. Используйте '===' – AbraCadaver

+0

Спасибо за ответ. Чтобы отслеживать и лучше понимать, что «тип» может сравнить PHP, чтобы определить их равными? – user3720435

+0

Это строковые представления поплавков: 'echo (float) $ value; echo (float) $ selected; 'http://php.net/manual/en/language.types.string.php#language.types.string.conversion – AbraCadaver

ответ

Смежные вопросы