Сравнение строк через == И чего strcmp
кажется, что PHP === оператор чувствителен к регистру? Так есть ли причина использовать strcmp()? Безопасно ли делать что-то вроде:
if ( $password === $password2 ) { ... }
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, если string1 сортирует перед string2, больше 0, если string2 сортирует перед string1 или 0, если они одинаковы. Например
$first_string = "aabo";
$second_string = "aaao";
echo $n = strcmp($first_string,$second_string);
функция вернет больше нуля, так как aaao сортирует перед aabo.
можно использовать strcmp() Если вы хотите заказать/сравниваем строки лексикографически. Если вы просто хотите проверить равенство, то == это просто прекрасно.