|
|
|
| Что может вывести такой код:
$x=some_function();
if ($x==-1)
echo "$x = -1";
|
| |
|
|
|
|
|
|
|
для: partizan
(01.03.2006 в 20:04)
| | А к чему такой вопрос? | |
|
|
|
|
|
|
|
для: codexomega
(01.03.2006 в 20:43)
| | Просто так. Например я очень удивился, когда в результате работы похожего скрипта увидел на экране надпись
| |
|
|
|
|
|
|
|
для: partizan
(01.03.2006 в 20:47)
| | ну так по такому скрипту так и должно быть :) | |
|
|
|
|
|
|
|
для: partizan
(01.03.2006 в 20:47)
| | Хм... странно... а нет возможности вывести значение
а также занчение $x. | |
|
|
|
|
|
|
|
для: partizan
(01.03.2006 в 20:47)
| | | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2006 в 10:27)
| | Штука в том, что условие if ($x==-1) не должно при таком раскладе срабатывать... | |
|
|
|
|
|
|
|
для: cheops
(02.03.2006 в 12:48)
| | А оно-то какраз срабатывает, при значении x=true | |
|
|
|
|
|
|
|
для: partizan
(02.03.2006 в 16:23)
| | Какого типа у вас переменная $x? Boolean (логическая)? Если да, то все правильно. Так как, значение false <=> 0, а true - любому другому числу, как неотрицательному так и отрицательному. | |
|
|
|
|
|
|
|
для: Drago
(02.03.2006 в 18:44)
| | Поскольку тип второго аргумента в бинарных операциях приводится к типу первого. и тут всё ясно...
А вот почему булев тип при приведении к строке (при работе echo в частности) преобразуется таким странным образом?
А почему собственно....
По мануалу.http://ru.php.net/manual/ru/language.types.string.php#language.types.string.casting | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2006 в 19:35)
| | Если использовать для сравнения оператор "==", то типы переменных не учитываются. И false == 0, так же как false == "", также как 0 == "". Чтобы учитывался тип переменных, нужно использовать оператор сравнения "===". | |
|
|
|
|
|
|
|
для: Drago
(02.03.2006 в 19:54)
| | Со сравнением все верно. Есть мягкое - сравнивает приведенные значения, есть жесткое - разные типы считает неравными значениями.
А в строке echo "$x = -1"; которая, собственно, и печатает анафему, только преобразование.
Конечно, мануал мануалом, но откровенно говоря, мне все еще неясно, почему разработчики PHP решили преобразовывать булев тип в строку так странно.
echo array(1,2,3); печатает Array, а echo 2*2 != 4; почему-то false печатать не хочет. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2006 в 20:18)
| | Почему странно, испокон веку true в 1 преобразуется, а false в 0. Сами константы true и false сравнительно недавно появились в программировании, например, в C их вообще нет - вместо них используется 1 и 0. | |
|
|
|
|
|
|
|
для: cheops
(02.03.2006 в 22:42)
| | Если б false в 0 преобразовывалось, я бы и не пыхтел. Но оно же преобразуется в пустую строку!
Собственно, чем вызван вопрос-то. Хочется понять логику разработчиков. Тогда легче будет запомнить поведение.
Спокон веку тоже понятие относительное. Или имеется в виду 21 век? :)
В Фортране, (во всех ходовых реализациях) true преобразовывалось (точнее представлялось) в -1 (слово, набитое единицами). В форте, если память не изменяет, тоже. В алголе, паскале и прочих языках строгой типизации такие фортели были вообще запрещены.
В Си - да. Единица. Замечательное красивое логичное решение. Ну уж потом С++, Java и понеслось.
НО! Везде понятна логика! А в варианте true печатаем единичкой, false не печатаем вообще я, например, логики не вижу. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2006 в 22:52)
| | Что здесь странного?
var_dump(2*2 != 4); | |
|
|
|
|
|
|
|
для: isset
(02.03.2006 в 23:28)
| | Ну... если так формулировать..... Хорошо. Тогда странно то , что
<?php function my_var_dump($v) { $t = gettype($v); echo "$t($v)" }
my_var_dump(2*2 !=4); my_var_dump(2*2==4); ?>
| и
<?php var_dump(2*2 !=4); var_dump(2*2==4); ?>
| дают, мягко говоря, разный отклик. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2006 в 22:52)
| | >Если б false в 0 преобразовывалось, я бы и не пыхтел. Но оно же преобразуется в пустую строку!
Ну так и праывильно. если строка пустая, значит она не имеет значения. А раз она не имеет значения, значит равносильно нулю, то есть false. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2006 в 22:52)
| | >НО! Везде понятна логика! А в варианте true печатаем
>единичкой, false не печатаем вообще я, например, логики
>не вижу.
Есть такое дело, это тараканы PHP, он действительно пустой строкой представляет false. | |
|
|
|
|
|
|
|
для: partizan
(01.03.2006 в 20:04)
| | http://ru2.php.net/boolean
Внимание
-1 считается TRUE, как и любое ненулевое (отрицательное или положительное) число!
|
| |
|
|
|