69688

ОПЕРАТОР ЕКВІВАЛЕНТНОСТІ (===)

Лекция

Информатика, кибернетика и программирование

Іноді звичайний оператор порівняння == працює не зовсім коректно, точніше не так, як нам хочеться, в деяких ситуаціях навіть виходять міні-анекдоти. Розглянемо наступний приклад...

Украинкский

2014-10-08

28 KB

0 чел.

Тема 7: ОПЕРАТОР ЕКВІВАЛЕНТНОСТІ (===)

Іноді звичайний оператор порівняння == працює не зовсім коректно, точніше не так, як нам хочеться, в деяких ситуаціях навіть виходять міні-анекдоти. Розглянемо наступний приклад:

<?

$х   = 0;    //   число,   рівне   0

$s   = "";    //пустий   рядок

echo gettype($x)."\n";

echo gettype($s)."\n";
if    ($x==$s)    echo   "x   =s";
?>

Змінні $х і $s не можуть бути рівні навіть з логічної точки зору, програма спочатку виводить повідомлення про те, що змінна $х є цілим числом (integer), а змінна $s — рядком (string). A після цього програма повідомляє, що змінні рівні. Вся справа тому, що PHP трактує одну із змінних (яку саме — не знаю, оскільки і 0, і " " — це false, цілком може бути, що інтерпретатор вважає логічним обидві змінні), як логічну змінну, а якщо хоч би одна змінна логічна, то друга теж вважається логічною. Тому ми отримуємо false==false, отже, програма виведе рядок "x=s".

Щоб уникнути подібної ситуації, потрібно використовувати оператора еквівалентності = = =. Якщо модифікувати нашу програму так:

<?

$х   =   0;

//   число,   рівне   0

$s   =   "";   

//пустая   рядок

echo   gettype($x)."\n";

echo   gettype($s)."\n";

if    ($x===$s)    echo   "x   =s";

?>

то зараз рядок "x=s" виведена не буде. Проведемо ще один експеримент; з використанням масивів. Розумію, що про масиви в PHP ви ще нічого не знаєте, але зараз просто необхідно забігти небагато наперед.

<?

$A  =   array('l'=>'0001');   

//   використовуються   апострофи,   а не   лапки

$В   =   array('2'=>'0010');

if   ($А  ==   $B)   echo   "A=   -В".;

if    ($А   ===   $B)    echo   "A=   =   =B";

?>

Буде виведений перший рядок, але не друга. У версіях PHP 4.0.x і нижче масиви $А і $в перетворювалися в рядки "array", які і порівнювалися. Ось через це оператор == неправильно працював. Оператор === із самого початку позбавлений цього недоліку. Зараз у мене встановлена версія 4.1.2 (не найновіша), але в ній оператор == працює коректно.

Для оператора === повинен бути зворотний оператор !===, але його немає. Якщо ви напишете:

if    ($А   !===   $B)    echo   "A<>B";

ви отримаєте повідомлення про помилку. Але можна обійти цю незручність так:

if    (!($А   ===   $B))    echo   "A<>B";


 

А также другие работы, которые могут Вас заинтересовать

49805. Зворотне wavelet перетворення 989.5 KB
  Нехай нам даний змінний в часі сигнал. Іноді wavelet перетворення буде складатися з обчислення коефіцієнтів, які є добутками сигналу сімейства «Wavelet». В неперервному перетворенні wavelet, який відповідає масштабу і розміщенню в часі і записується так
49807. Програмування під Windows. Методичні вказівки 219 KB
  Первунінський МЕТОДИЧНІ ВКАЗІВКИ до виконання курсової роботи з дисципліни Програмування під Windows для студентів спеціальностей Методичні вказівки до виконання курсової роботи з навчальної дисципліни Програмування під Windows для студентів спеціальності Відповідальний за випуск: Затверджено Методичною радою Черкаського державного технологічного університету як методичні вказівки до виконання курсової роботи з навчальної дисципліни Програмування під Windowsâ для студентів спеціальності 8.
49811. ТЕХНИЧЕСКАЯ ЭКСПЕРТИЗА ОБЪЕКТА НЕДВИЖИМОСТИ 517.5 KB
  Проведенный анализ показывает что рассматриваемый жилой дом не соответствует СНиП 31012003 Здания жилые многоквартирные 17 по пунктам: 00 00 и 00. Проведенный анализ показывает что рассматриваемый жилой дом соответствует требованиям СНиП 210197 âПожарная безопасность зданий и сооруженийâ 18 . Анализ плана приведенного в техническом паспорте и фактической планировки квартиры на текущий момент позволяет сделать вывод об отсутствии какихлибо перепланировок квартиры №3: положение перегородок несущих стен и проемов в них...
49812. Расчет экономической эффективности и срока окупаемости программы «База данных по учету табельного времени» 364.32 KB
  Трудозатраты на разработку и отладку программы Расчет экономической эффективности и срока окупаемости проектируемой программы реализованной на ЭВМ начинается с расчета трудовых затрат так как затраты организаций на оплату труда являются одной из главных статей в структуре себестоимости продукции.1 где: tо нормативы затрат труда на подготовку описания задачи 12 чел час; tн нормативы затрат на исследования алгоритма решения задачи чел час; t нормативы затрат на разработку блок-схемы алгоритма чел час; tп нормативы...
49813. Автомобильный термогенератор 833.5 KB
  Устройство индукционного генератора автомобиля Принцип действия индукционного генератора автомобиля На данный момент основным способом подзарядки является использование ременной передачи от коленчатого вала двигателя к валу индукционного электрогенератора который заряжает аккумулятор и питает электрические приборы автомобиля. Предметом исследований является разработка нового автомобильного генератора работающего за счет тепла выделяемого двигателем авто.