Похоже, что оператор PHP'===
чувствителен к регистру? Так есть ли смысл использовать strcmp()
? Безопасно ли делать что-то вроде:
if ( $password === $password2 ) { ... }
Причина его использования заключается в том, что strcmp
возвращает < 0, если str1 меньше str2; > 0, если str1 больше str2, и 0, если они равны.
===
возвращает только true
или false
, но не говорит вам, какая строка "больше".
Вы никогда не должны использовать ==
для сравнения строк. ===
это нормально.
$something = 0;
echo ('password123' == $something) ? 'true' : 'false';
Просто запустите приведенный выше код, и вы'МР понять, почему.
$something = 0;
echo ('password123' === $something) ? 'true' : 'false';
Теперь, что's немного лучше.
Дон'т использовать ==
в 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 предложил.
Всегда помните, что при сравнении строк, вы должны использовать ===
оператор (строгое сравнение) и не ==
оператор (свободный сравнении).
Суммируя все ответы :
==
это плохая идея для сравнения строк.
<БР>это даст тебя "удивительно" и результаты во многих случаях. Дон'т доверять ему.
===
это хорошо, и даст вам лучшую производительность.
`чего strcmp () следует использовать, если вам нужно, чтобы определить, какие строки есть "Большой" и, как правило, для сортировки операций.
Использование ==
может быть опасным.
Обратите внимание, что это приведет переменную к другому типу данных, если они различаются.
Примеры:
echo (1 == '1') ? 'true' : 'false';
echo (1 == true) ? 'true' : 'false';
Как вы можете видеть, эти две функции относятся к разным типам, но результатом является true
, что может быть не тем, что ожидает ваш код.
Использование ===
, однако, рекомендуется, поскольку, как показывает тестирование, оно немного быстрее, чем strcmp()
и его альтернатива strcasecmp()
, не учитывающая регистр.
Быстрый гугл выдает следующее сравнение скорости: http://snipplr.com/view/758/
чего strcmp()
и ===
являются чувствительными к регистру, но ===
гораздо быстрее
пример кода: http://snipplr.com/view/758/
чего strcmp возвращает разные значения в зависимости от окружающей среды он работает(Линукс/Windows)!
Причина в том, что это ошибка, а сообщение об ошибке говорит https://bugs.php.net/bug.php?id=53999
Пожалуйста, обращаться с осторожностью!!Спасибо.
Вы можете использовать strcmp()
, если хотите упорядочить/сравнить строки лексикографически. Если вы просто хотите проверить равенство, то ==
вполне подойдет.
Также функция может помочь в сортировке. Чтобы быть более ясным о сортировке. чего strcmp() возвращает значение меньше 0, если строка1 строка2 рода прежде, больше, чем 0, если строка1 или строка2 видов до 0, если они одинаковы. Например
$first_string = "aabo";
$second_string = "aaao";
echo $n = strcmp($first_string,$second_string);
Функция возвращает больше нуля, а aaao-это сортировка перед Аабо.
PHP вместо использования сортировка по алфавиту, использовать код ASCII значение символа, чтобы сделать сравнение. Строчные буквы имеют более высокую в ASCII значение, чем в столицах. Это'ы лучше использовать оператор идентичности === чтобы сделать такого рода сравнение. чего strcmp() функция для выполнения бинарных безопасный сравнения строк. Она принимает две строки в качестве аргумента и возвращает в < 0, если str1 выглядит следующим образом менее стр2; > 0, если str1 выглядит следующим образом больше, чем строка str2, и 0, если они равны. Есть и регистр версия имени strcasecmp (), который сначала преобразует строки в нижний регистр, а затем сравнивает их.