Forum Webscript.Ru
Программирование => PHP => Тема начата: Alex_Koval от 04 Сентября 2004, 16:53:20
-
Есть скрипт:
$i=0;
echo "ДО * $i
";
if ( $i == \'Блин\' ) {
echo \'Вы этого не должны видеть, Блин!!!
\';
$i = \'Блин\';
}
echo "ПОСЛЕ * $i
";
Вопрос:
Чему равняется переменная $i в конце при выводе?
Решите его устно и практически.
-
:) Чудная штука.
Я не верил что будет \'Блин\'
-
Alex_Koval
Что за дела? :(
Slastik
Почитай на досуге раздел мануала "Type Juggling".
-
Neter
Почитал. у меня сегодня как раз целый день досуга.
Просто выглядит прикольно. Такого сочитания не встречал.
Хотя форум довольно строгий, так что пост наверное выглядит неуместно.
-
Даю выписку из Вашего "Type Juggling":
Для целых чисел 0 (ноль) вычисляеться как False, а любое ненулевое целое значение как True. Анологично действительное значение 0,0 (или такие его эквиваленты 0,000) вычисляются как False, а ненулевые значения вычисляются как True. Что касаеться строк, то пустая строка вычисляеться как False, она представляеться парой кавычек между которыми ничего нет. Все непустые строки вычисляються как True.
В даном случае мы получаем True.
Поставте в начале $i=1;
А еще сравнение сделайте if ( $i == \'1\' )
Вот Вам integer и string
Поэксперементируйте с вариантами $i= "0"; TRUE; FALSE;
Я соглашусь со всем, но то что 0 дает ИСТИНУ НИКОГДА
-
Я не понимаю, что ты хочешь доказать? Код работает правильно, ошибка в тебе :) Где у тебя "ноль даёт истину"?
В твоём примере ты сравниваешь значения числовой и строчной переменных, поэтому РНР автоматически переводит строку в число, напиши: var_dump(intval("Блин")) что получилось? Тоесть для интерпритатора это то-же самое как если бы ты написал: if(0==0) Результатом этой логической операции будет - TRUE. Если ты хочешь сравнивать не только значения переменных, но и их тип, используй оператор "===".
-
Спасибо за ответ, приблизительно понятно.
Но возникли опять вопросы.
Всегда ли строка переводится в число или в зависимости что идет первым и если поставить
if (\'Блин\' == $i )
то перевод переменной $i произойдет из числа в строку?
-
Спасибо еще раз, эксперементальным путем опредилил что всегда в число.
Тогда обьясните что происходит если $i=TRUE; и $i=FALSE;
при этом вторая часть неважно какая \'Блин\' только не 0 или \'0\'.
Здеси получается все наоборот.
При таких значениях получается что игнорируется ==
И если TRUE то условие выполняется, и если FALSE то нет.
При сравнении с нулем в строке или числом условие опять нарушается.
Какой принцип выполнения такого условия.
-
Вобщем-то нет разницы между, if(TRUE=="0") и if (0), тоесть важно понять, что заключённое в скобки выражение проверяется на истинность и все логические операторы возвращают либо ИСТИНА либо ЛОЖЬ. FALSE - это когда переменная пуста или равна нулю.
TRUE - соответственно не пустая, отличная от нуля переменная.
Поэксперементируй, посмотри как оно работает:echo (TRUE=="0") ? "TRUE" : "FALSE";
Да и скачай нормальный английский мануал с php.net и прочитай весь второй раздел, Language Reference, если будешь вдумчиво читать вопросов больше не возникнет.
-
Я эту проблему с переводом понемаю немного подругому.
Например в Delphi есть функция StrToInt тоесть, переводит строку в тип integer или real, причём нужно чтобы строка включала только цифры, а если сроку нельзя перевести в integer или real из-за содержания в ней букв или других символов, возвращaется 0 (False). Также как и в PHP.
-
Kneaz
Какую проблему? Причём здесть Дельфи?
Ромик, грохни его пост, он сбивает неокрепшие умы :)
-
Neter
Большое спасибо за помощь, она не сравнится ни с одним мануалом.
Если учесть что 90% програмистов интернет самоучки, то Вы приносите большую пользу в изучении ПХП.
Да, и если можно еще вопрос:
В вашем условии где TRUE=="0", то есть что то не может равняться нулю и мы получаем FALSE, здесь все понятно.
Как быть с таким условием.
echo (TRUE=="текст") ? "TRUE" : "FALSE";
Почему же здесь получается TRUE?
-
http://www.php.net/manual/ru/types.comparisons.php
-
Вот это крутой ответ, спасибо RomikChef.
Вопросов больше нет, одни благодарности.
Ничего себе новичок на 4126 сообщения.