Лоу оновився до SMF!
$x = 0;//потімif($x == false) { //1 порівняння//умова виконується}//а якщоif($x === false) { //2 порівняння//умова НЕ виконується}
На жаль, ваше запитання, таки залежить від мови програмування.
... виконує приведення типів, тобто конвертує значення які порівнюються до одного типу і виконує порівняння, а `===` не виконує приведення типів. І, оскільки типи різні, то оператор `===` повертає false, а оператор `==` - true.
https://www.php.net/manual/en/language.operators.comparison.php
xuser@mbs:~$ ll /var/www/html/итого 15drwxr-xr-x 16 root root 239 янв 24 15:04 ./drwxr-xr-x 6 root root 51 июл 16 2020 ../drwxr-xr-x 3 root root 18 июл 14 2020 es5/-rw-r--r-- 1 root root 10918 мая 25 2020 _index.htmldrwxr-xr-x 3 root root 18 фев 20 2020 js/drwxrwxr-x 3 xuser xuser 18 янв 24 15:15 jsukr/drwxrwxr-x 6 www-data xuser 87 июн 9 2019 mbs/drwxr-xr-x 3 root root 18 окт 14 2020 mt/drwxr-xr-x 3 root root 49 окт 1 2020 mysql/drwxr-xr-x 3 root root 18 июл 15 2020 mysqlru/drwxrwxr-x 7 www-data xuser 79 июл 7 07:45 oop/drwxrwxr-x 6 www-data xuser 80 дек 23 2019 oop1/drwxr-xr-x 3 root root 18 авг 23 2019 php/drwxr-xr-x 3 root root 18 окт 14 2020 phpru/drwxr-xr-x 3 root root 18 окт 10 2020 re/drwxrwxr-x 7 www-data xuser 109 окт 20 2019 wcmbs/drwxr-xr-x 3 root root 18 окт 14 2020 wr/xuser@mbs:~$
Я не гуру PHP але...
Не знаю. Але я думаю (думав?) що в кожній мові програмування є звичайне порівняння і тренарне порівняння. Може в якихось мовах із жорсткою типізацією такого і нема?
Щоб зрозуміти як воно працює потрібно глянути в php-source, але я в тих справах не розбираюсь.
Значить якщо інтерпретатор зустрічає ===, він виконує щось іще (магію з типами. але як воно конкретно відбувається?). Мені просто (було?) цікаво як $x із значенням 00h може бути і false, і true?
Java?
Магії немає, == порівнює значення приведені до одного типу, а === повертає false, коли бачить, що типи даних в операндів ліворуч і праворуч різні. Там навіть не доходить до порівняння значень.
Цитата: ysenko від 2021-07-24 21:06:54Магії немає, == порівнює значення приведені до одного типу, а === повертає false, коли бачить, що типи даних в операндів ліворуч і праворуч різні. Там навіть не доходить до порівняння значень.Ясно, але як воно приводить дані до конкретного типу не ясно. ---Тему закрито, мабуть?
$ php -aphp > $x = (string)0;php > print gettype($x);stringphp > print gettype($x + 1);integerphp > print gettype($x + false);integerphp > print gettype($x == false);boolean
Ясно, але як воно приводить дані до конкретного типу не ясно.
...В PHP є функція gettype(), щоб подивитися який тип має значення.Код: [Вибрати]$ php -aphp > $x = (string)0;php > print gettype($x);stringphp > print gettype($x + 1);integerphp > print gettype($x + false);integerphp > print gettype($x == false);booleanОператор + перетворює результат у тип integer.Оператор == та === завжди перетворює результат у тип boolean.Крім того, PHP вміє будь-яке значення перетворити в логічний тип.0 == false, 22 == true"" == false, "abc" == true
Що таке Чхунту? Якесь індіанське племʼя циган?
Тут є трохи про явне і неявне приведення типів https://www.php.net/manual/en/language.types.type-juggling.php