Потихоньку разбираюсь с операциями сравнения в PHP. Однако есть сложность с пониманием логичности такого сравнения:
$a = 0;
if ("$a" == "") echo "Есть равенство";
В результате ничего не будет выведено.
Как я понимаю, $a в кавычках это будет число 0 (в кавычках интерполируется значение), а пустая строка тоже 0 (и уже потом интерпретируется как false). Почему же они не равны?
Что же и как сравнивается в данном случае? Поясните пожалуйста.
Спасибо.
Спустя 4 минуты, 42 секунды (22.01.2010 - 17:16) Gradus написал(а):
В кавычка содержиться строковое значение , тоесть вы сравниваете буковки $a равны ли пустоте, конешно же нет.
правиьно будет
а если сравнивать с нулём то
правиьно будет
if ($a == "")
а если сравнивать с нулём то
if ($a == 0)
Спустя 2 минуты, 14 секунд (22.01.2010 - 17:18) baston написал(а):
Gradus, спасибо. Получается, в данном случае (то есть в операциях сравнения), все переменные в кавычках не интерполируются по общему правилу? Вот в чем мое было заблуждение, значит...
Спустя 1 минута, 56 секунд (22.01.2010 - 17:20) Gradus написал(а):
Цитата |
Получается, в данном случае (то есть в операциях сравнения), все переменные в кавычках не интерполируются по общему правилу? |
Так не только в оператарах условия , а во всём php
Спустя 6 минут, 1 секунда (22.01.2010 - 17:26) Gradus написал(а):
Можете поэкспоминтировать
$a=0;
$b="0";
$c='$a';
$d=$b;
echo "a"=.var_dump($a)."<br>";
echo "b"=.var_dump($b)."<br>";
echo "c"=.var_dump($c)."<br>";
echo "d"=.var_dump($d)."<br>";
Спустя 4 минуты, 56 секунд (22.01.2010 - 17:31) baston написал(а):
Цитата (Gradus @ 22.01.2010 - 17:20) |
Так не только в оператарах условия , а во всём php |
Не понял! Как так? В учебниках и на сайте PHP.su читаю: "переменные в строках PHP интерполируются".
P.S. Поэксперементирую...
Спустя 6 минут, 47 секунд (22.01.2010 - 17:38) baston написал(а):
Цитата (Gradus @ 22.01.2010 - 17:26) |
Можете поэкспоминтировать$a=0; |
Наверное, надо так было:
echo "\$a = " .var_dump($a)."<br>";
echo "\$b = " .var_dump($."<br>";
echo "\$c = " .var_dump($c)."<br>";
echo "\$d = " .var_dump($d)."<br>";
Спустя 1 минута, 54 секунды (22.01.2010 - 17:40) Gradus написал(а):
Цитата |
Наверное, надо так было: |
не надо было, а это уж как вам удобней
Цитата |
"переменные в строках PHP интерполируются". |
$name='Вася';
echo "Меня зовут, $name";
В данном случае выведет значение переменной,НО лучше экранировать их от текста
Спустя 2 минуты, 13 секунд (22.01.2010 - 17:42) baston написал(а):
мой вариант тоже ничего не дал, но ваш вариант выдает ошибку для строк, где
Цитата |
"a"=. |
.
Спустя 1 минута, 44 секунды (22.01.2010 - 17:44) Gradus написал(а):
извеняюсь написал на скорую руку
остальные тоже надо переписать
echo "a=".var_dump($a)."<br>";
остальные тоже надо переписать
Спустя 5 минут, 56 секунд (22.01.2010 - 17:50) baston написал(а):
Но почему значение "$b" = 1? Какое правило здесь? Ведь по идее, строка преобразуется в число, в данном случае должно быть 0, а не 1. Проясните этот момент пожалуйста. Туплю здесь...
Спустя 9 минут, 14 секунд (22.01.2010 - 17:59) baston написал(а):
Ну,вот как пример:
В данном случае вместо переменной b будет подставлена строка, которая преобразуется в соответствующее число, поэтому результат будет верен.
$a = 10; $b = "10"; if ($a == $b) echo "Переменные равны";</span>
В данном случае вместо переменной b будет подставлена строка, которая преобразуется в соответствующее число, поэтому результат будет верен.
Спустя 5 часов, 15 минут, 17 секунд (22.01.2010 - 23:14) baston написал(а):
Ну, вот даже на оф.сайте написано, что:
Цитата |
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement. The type conversion does not take place when the comparison is === or !== as this involves comparing the type as well as the value. |
То есть, если сравнивается число и строка, то строка преобразуется в число. В примере выше это правило соблюдается и число 10 равно строке 10.
Однако в примере из первого сообщения ($a = 0; ("$a" == "") ) это правило не проходит. В чем же причина?
Спустя 39 минут, 55 секунд (22.01.2010 - 23:54) inpost написал(а):
переменная а равна числу 0, а ты проверяешь на пустоту переменной. 0 - это уже значение, пусть и числовое-нулевое!!!
Проверять, пустая ли переменная нужна, когда берешь строку из базы данных, а потом делаешь проверку, есть ли там записи таким образом.
Я так делаю: если есть ссылка на фото - то вставляем, если нету значений, вставляю на базовое фото "nophoto.jpg".
Проверять, пустая ли переменная нужна, когда берешь строку из базы данных, а потом делаешь проверку, есть ли там записи таким образом.
Я так делаю: если есть ссылка на фото - то вставляем, если нету значений, вставляю на базовое фото "nophoto.jpg".
Спустя 12 минут, 52 секунды (23.01.2010 - 00:07) jetistyum написал(а):
$a = 0;
$a == 0 ; //true
$a == '' ; //true
$a === '' //false
"$a" == 0; //true
"$a" === 0; // false
$a == false; //true
$a === false; //false
$a == 0 ; //true
$a == '' ; //true
$a === '' //false
"$a" == 0; //true
"$a" === 0; // false
$a == false; //true
$a === false; //false
Спустя 38 минут, 4 секунды (23.01.2010 - 00:45) Platinum написал(а):
Давно хотел узнать, а чем отличается знаки == и === ?? Не пойму в чём различия
== - равенство
=== - идентично
разве это не одно и тоже?
== - равенство
=== - идентично
разве это не одно и тоже?
Спустя 5 часов, 51 минута, 32 секунды (23.01.2010 - 06:37) qpayct написал(а):
Ёлки-моталки. Дк а как ты хочешь приравнять значение переменной, когда ты её в кавычки в3ял? %-)
это всёравно что спросить зачем тебе холодильник, если ты не куришь..
это всёравно что спросить зачем тебе холодильник, если ты не куришь..
Спустя 1 час, 57 минут, 47 секунд (23.01.2010 - 08:35) baston написал(а):
Цитата (Platinum @ 23.01.2010 - 00:45) |
Давно хотел узнать, а чем отличается знаки == и === ?? Не пойму в чём различия == - равенство === - идентично разве это не одно и тоже? :D |
Первое проверяет равенство значений, второе - идентичность или эквивалентность, то есть тип и значение.
Например, $a = "10"; $b = 10;
if ($a == $b) echo "равны";
if ($a === $b) echo "эквивалентны";
Первое истинно, то есть значения равны, так как 10 в кавычках преобразуется в число.
Второе не эквивалентно, поэтому выведено сообщение не будет. Потому, как если их значения равны, то типы нет ("10" - это строка, 10 - это число (int)).
Спустя 1 минута, 58 секунд (23.01.2010 - 08:37) baston написал(а):
Цитата (qpayct @ 23.01.2010 - 06:37) |
Ёлки-моталки. Дк а как ты хочешь приравнять значение переменной, когда ты её в кавычки в3ял? %-) это всёравно что спросить зачем тебе холодильник, если ты не куришь.. |
Елки-палки
Да не сравнение меня интересует в данном случае, а операнды! Почему для них не работает интерпретирование и преобразование?
Спустя 1 час, 45 минут, 39 секунд (23.01.2010 - 10:22) baston написал(а):
Разобрался. Всем спасибо. Тему можно закрыть.
Спустя 3 часа, 45 минут, 24 секунды (23.01.2010 - 14:08) Platinum написал(а):
baston, всё понял) спс