Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 31.05.2014 | нет комментариев

Из-за того, что в 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 и т.п.)?

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

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

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB