11 ответов:
причина использовать его потому что
strcmpвозвращает 0, если str1 выглядит следующим образом больше, чем строка str2, и 0, если они равны.
===возвращает толькоtrueилиfalse, он не говорит вам, какая строка "больше".
вы никогда не должны использовать
==для сравнения строк.===ОК.$something = 0; echo ('password123' == $something) ? 'true' : 'false';просто запустите приведенный выше код, и вы увидите, почему.
$something = 0; echo ('password123' === $something) ? 'true' : 'false';теперь, это немного лучше.
не используйте
==в PHP. Он не будет делать то, что вы ожидаете. Даже если вы сравниваете строки со строками, PHP неявно бросает их в поплавки и выполняет числовое сравнение, если они выглядят числовыми.'1e3' == '1000'возвращает true. Вы должны использовать===вместо.
хорошо..согласно этому php отчет об ошибке , вы даже можете получить 0wned.
<?php $pass = isset($_GET['pass']) ? $_GET['pass'] : ''; // Query /?pass[]= will authorize user //strcmp and strcasecmp both are prone to this hack if ( strcasecmp( $pass, '123456' ) == 0 ){ echo 'You successfully logged in.'; } ?>это дает вам предупреждение , но все же обойти сравнения.
Вы должны делать===как предложил @postfuturist.
всегда помните, что при сравнении строк, вы должны использовать
===оператор (строгое сравнение) и не==оператор (свободный сравнении).
используя
==может быть опасно.обратите внимание, что это приведет переменную к другому типу данных, если они отличаются.
примеры:
echo (1 == '1') ? 'true' : 'false';echo (1 == true) ? 'true' : 'false';как вы можете видеть, эти два из разных типов, но результат
true, что может быть не то, что ваш код будет ожидать.используя
===, однако, рекомендуется, поскольку тест показывает, что это немного быстрее, чемstrcmp()и его регистр-нечувствительная альтернативаstrcasecmp().быстрый гуглинг кричит это сравнение скорости:http://snipplr.com/view/758/
Суммируя все ответы :
==Это плохая идея для сравнения строк.
это даст вам "удивительные" результаты во многих случаях. Не доверяй ему.
===отлично, и даст вам лучшую производительность.
strcmp()следует использовать, если вам нужно определить, какая строка "больше", как правило, для операций сортировки.
strcmp () и "===" чувствительны к регистру, но "===" намного быстрее
пример кода: http://snipplr.com/view/758/
strcmp вернет различные значения в зависимости от среды, в которой он работает(Linux/Windows)!
причина в том, что у него есть ошибка, как говорится в отчете об ошибке https://bugs.php.net/bug.php?id=53999
пожалуйста, обращайтесь с осторожностью!!Спасибо.
также функция может помочь в сортировке. Чтобы быть более ясным о сортировке. чего strcmp() возвращает значение меньше 0, если строка1 строка2 рода прежде, больше, чем 0, если строка1 или строка2 видов до 0, если они одинаковы. Например
$first_string = "aabo"; $second_string = "aaao"; echo $n = strcmp($first_string,$second_string);функция вернет больше нуля, так как aaao сортирует перед aabo.
можно использовать
strcmp()Если вы хотите заказать/сравниваем строки лексикографически. Если вы просто хотите проверить равенство, то==это просто прекрасно.
Comments