вопрос касательно языка php

Arramis

Новичок
мои мозги треснулись и я потерял пару часов из-за следующих дибильных фактов в пхп а именно
PHP:
0  ==  'some stgring'; // true
а
PHP:
0 === 'some string'; // false
со вторым случаем более менее понятно, результат false потому что проверка типов даёт false, но почему первый случай даёт true, как может ложное значение равняться строке, ведь непустая строка по своей сути это истина ??
 

Вурдалак

Продвинутый новичок
со вторым случаем более менее понятно, результат false потому что проверка типов даёт false, но почему первый случай даёт true, как может ложное значение равняться строке, ведь непустая строка по своей сути это истина ??
Оператор «==» не транзитивен:
Код:
$ php -r '$a = 0; $b = "foo"; $c = true; var_dump($a == $b, $b == $c, $a == $c);'
bool(true)
bool(true)
bool(false)
 

Arramis

Новичок
ну конечно бросаться ссылками всегда проще чем попытаться объяснить, там же только факты без пояснений как таковых - аля либо принимай либо пиши свой пхп

эти таблицы я бы и сам мог написать методом проба и тыков :)
 

AnrDaemon

Продвинутый новичок
Сам то понял, что сказал? :confused:
Тебе привели нормативную документацию, по которой язык построен, а ты заявляешь, что "сам бы мог такое написать"? Конечно смог бы, ведь это норматив, который ты будешь анализировать своим методом тыка.
 

Arramis

Новичок
Сам то понял, что сказал? :confused:
Тебе привели нормативную документацию, по которой язык построен, а ты заявляешь, что "сам бы мог такое написать"? Конечно смог бы, ведь это норматив, который ты будешь анализировать своим методом тыка.
что значит нормативная документация ?? то что 0=='string' есть true а 0==='string' есть false это я сам убедился еще до создания темы запустив код, в тех ссылках грубо говоря тотже код плюс куча ненужной информации, зачем мне такое? там же нет пояснений
 

Вурдалак

Продвинутый новичок
Это нужно просто запомнить. В языках со слабой типизацией по-любому будут какие-то правила, которые тебе могут показаться логичными, а другому — нет. Избавиться от неожиданностей можно было бы только при сильной типизации, когда ты в принципе не смог бы сравнивать значения без явного приведения к одному из типов.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Блин, мне вот даже не лень было пойти и найти тебе кусочек текста, чтобы ты, великий - не мучался с прочтением ненужной документации:

В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.
В данном случае строка, начинающаяся не с цифры - даст ноль.
 

Arramis

Новичок
Блин, мне вот даже не лень было пойти и найти тебе кусочек текста, чтобы ты, великий - не мучался с прочтением ненужной документации:



В данном случае строка, начинающаяся не с цифры - даст ноль.
ясно спасибо ))
 

полудух

Итсист
представь, что 0 это "ноль"
к слову говоря, пхп ещё и так умеет:
if('123a' < '234b'){} // true
:eek:
 
Сверху