Почему 'a'==0 ?

Роберт

Аналитик
Почему 'a'==0 ?

if ('a'==0) echo '+'; //Результат: +

Почему?
Ну я ещё понял бы если это было бы связано с эквивалентностью значений: "" , 0 , false
Но:
'a'==0
'a'<>""
'a'<>false

Даже наоборот: 'a'==true
А ведь true==1
Тогда получается что 'a' должно быть рано 1 , а оно почему-то равно нулю... :(
Как же так? Может кто-нибудь объяснить?
 

DiMA

php.spb.ru
Команда форума
потому, что при сравнении строка == число все приводится к числу
строка "а" равна нулю
строка "123ххх" равна 123

короче, читай доку, тебе поможет ===
 

Роберт

Аналитик
Ну про '===' это понятно...
Я про то что получается ну как бы нельзя пройти в один шаг этапы:
'a'==true и true==1
поскольку
'a'==0

Спасибо за мысль о разном подходе при приведении к boolean и integer
 

DiMA

php.spb.ru
Команда форума
не пиши дурь:
true не равно 1
false не равно 0

при сравнении чисел и булевых констант (или любых разных типов) по некоторым законам (которые нужно узнать из доки или запомнить из практики) приводятся к одному типу, и сравниваются
 

Роберт

Аналитик
iceman
Просто теоретический вопрос. Не совсем понял когда увидел в одном примере что при:
$array = array(0 => 'blue', 1 => 'red', 2 => 0x000000, 3 => 'green', 4 => 'red');
$key = array_search('green', $array);
Значение $key будет равно 2 , а не три...

DiMA
Не совсем понял почему ты написал "не пиши дурь" , ведь:
if (1==true) echo '+';
if (0==false) echo '+';
в обоих случаях даст плюсы...
 

Роберт

Аналитик
Понятно , просто думал что когда сравнивется строка с числом - то сравнивается как строки , по принципу:
<script>
alert('1'+2);
</script>
и получим '12'
А оказывается приводится к числу...
 

Активист

Активист
Команда форума
> if ('a'==0) echo '+'; //Результат: +

Мое имхо - должно сравниваться ASCII коды =)
 

dimagolov

Новичок
Роберт, не путайте JS с его дефолтным преобразованием всего подряд в строки и PHP
 

zerkms

TDD infected
Команда форума
Активист
if ('ab' == 0)
а тут что тогда сравнивать, согласно твоему имху? :)
 
Сверху