...

суббота, 17 августа 2013 г.

Используете ли вы оператор нестрогого сравнения ("==") в PHP?


сегодня в 22:13


Из-за того, что в PHP при сравнении строк оператор "==" пытается сначала преобразовать их в числа [1][2] (даже, если оба операнда — строки), результат порой может оказаться неожиданным:

<?php
var_dump('123' == ' 123'); // true
var_dump('1e3' == '1000'); // true
var_dump('+74951112233' == '74951112233'); // true
var_dump('00000020' == '0000000000000000020'); // true
var_dump('0X1D' == '29E0'); // true
var_dump('0xafebac' == '11529132'); // true
var_dump('0xafebac' == '0XAFEBAC'); // true
var_dump('0xeb' == '+235e-0'); // true
var_dump('0.235' == '+.235'); // true
var_dump('0.2e-10' == '2.0E-11'); // true
var_dump('61529519452809720693702583126814' == '61529519452809720000000000000000'); // true в php < 5.4.4




Подобное сравнение также используется и в некоторых функциях. Например, в in_array:

<?php
$_GET['fileId'] = '0X1D';
// ...
$privateFileIds = array('29E0');
if (in_array(@$_GET['fileId'], $privateFileIds))
{
print 'Access deny';
exit;
}

// Выведет "Access deny", т.к. параметр "$strict" у функции "in_array" по умолчанию равен "false"




Решением проблемы может служить использование строгой проверки на соответствие:

// Использование оператора идентичности совместно с явным приведением операндов к строковому типу
(string) $aaa === (string) $bbb;

// Использование функции "strcmp"
strcmp($aaa, $bbb) == 0;

// Использование параметра "$strict" со значением "true" в соответствующих функциях
in_array((string) $aaa, $array, true);




Под строгой проверкой здесь подразумевается сравнение операндов одного типа исключительно по правилам сравнения данного типа.


Используете ли вы для сравнения строк нестрогую проверку на соответствие (оператор "==", параметр "$strict" со значением false и т.п.)?





















Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.


Проголосовало 56 человек. Воздержалось 17 человек.







Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий