LINUX.ORG.RU
ФорумTalks

php: echo ('x' == 0) выводит 1 (true). Это нормально?


0

1

Вот, встретились с товарищем с вопросом...


<?php

echo "check: " . ('x' == 0);

?>

выводит единицу. Это нормально?

PHP Version 5.5.9-1ubuntu4.2 PHP Version 5.3.13

Реквестирую объяснение. (И проверьте пжл на более свежих версиях).

★★★★★

Последнее исправление: AndreyKl (всего исправлений: 1)
$ php5 -r 'echo "check: " . ('x' == 0) . "\n";' 2> /dev/null
check: 1
$ php5 -v
PHP 5.6.0RC1 (cli) (built: Jun 24 2014 13:37:36) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0-dev, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
Darth_Revan ★★★★★
()

Причём если сравнивать НЕ с нулём, то false;
Смирись. В каком-то американском штате пи равно 3, а в ПХП х равно 0.

Stahl ★★☆
()

Используй === и твои волосы будут мягкими и шелковистыми. Насколько это вообще возможно при пхп-кодинге.

Deleted
()
Ответ на: комментарий от drull

я вообще ожидал что да, будет чар приводиться к инту. ну или инт к чару. ну или к строке будет инт приводиться.

AndreyKl ★★★★★
() автор топика

умвр

$ python
Python 3.4.1 (default, May 19 2014, 17:23:49) 
[GCC 4.9.0 20140507 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 'x' == 0
False
crowbar
()
Ответ на: комментарий от kim-roader

спасибо, забыл про эту табличку, хорошая ссылка. лучший ответ :)

AndreyKl ★★★★★
() автор топика
Ответ на: умвр от crowbar

даже более того, и это вполне ожидаемое поведение

~ $ python 
Python 3.4.1 (default, Jul  1 2014, 05:15:33) 
[GCC 4.8.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> if('x'):                                                                                                              
...  if(1):                                                                                                               
...   if(True):                                                                                                              
...    print("yay!")
...                                                                                                                          
yay!                                                                                                                         
>>>  
кстати, как с GCC 4.9.0 живётся?

wakuwaku ★★★★
()
Ответ на: комментарий от wakuwaku

Все нормально, хотя самим компилятором я не пользуюсь.

crowbar
()
Ответ на: умвр от crowbar

Ты так говоришь, словно питон стал слаботипизированным.

Deleted
()

Если сравнивать как числа, то результат будет «странным». Ну и конечно будет варнинг.

perl -wE 'say «x» == 0 ? «true» : «false»'
Argument «x» isn't numeric in numeric eq (==) at -e line 1.
true

Если сравнивать как строки, то работает как надо, без сюрпризов:

perl -wE 'say «x» eq 0 ? «true» : «false»'
false

outtaspace ★★★
()
Ответ на: комментарий от MiniRoboDancer

Ну 4. Я просто вспомнил общую суть маразма — там более, что округлить до 3, на мой взгляд, адекватней, чем до 4.

Stahl ★★☆
()
Ответ на: комментарий от Deleted

Ты так говоришь, словно брэйнфак придумали инопланетяне... Стоп! Ты что, серьезно?!

der_looser ★★
()
Ответ на: комментарий от kim-roader

after type juggling

жонглирование типами. до такого только в пхп могли додуматься.

rupert ★★★★★
()

Да, это нормально.

Объяснение: это PHP. У него мантра «если что-то не имеет смысла - лучше сделать что-нибудь, только не падать».

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.