[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Операция сравнения:строка и пусто - как сравнивать
baston
Здравсвтуйте.
Потихоньку разбираюсь с операциями сравнения в 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;
$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>";

Наверное, надо так было:
echo "\$a = " .var_dump($a)."<br>";
echo "\$b = " .var_dump($cool.gif."<br>";
echo "\$c = " .var_dump($c)."<br>";
echo "\$d = " .var_dump($d)."<br>";

Спустя 1 минута, 54 секунды (22.01.2010 - 17:40) Gradus написал(а):
Цитата
Наверное, надо так было:

не надо было, а это уж как вам удобней smile.gif
Цитата
"переменные в строках 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>";

остальные тоже надо переписать smile.gif

Спустя 5 минут, 56 секунд (22.01.2010 - 17:50) baston написал(а):
Но почему значение "$b" = 1? Какое правило здесь? Ведь по идее, строка преобразуется в число, в данном случае должно быть 0, а не 1. Проясните этот момент пожалуйста. Туплю здесь...

Спустя 9 минут, 14 секунд (22.01.2010 - 17:59) baston написал(а):
Ну,вот как пример:
$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".

Спустя 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

Спустя 38 минут, 4 секунды (23.01.2010 - 00:45) Platinum написал(а):
Давно хотел узнать, а чем отличается знаки == и === ?? Не пойму в чём различия
== - равенство
=== - идентично

разве это не одно и тоже? biggrin.gif

Спустя 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ял? %-)
это всёравно что спросить зачем тебе холодильник, если ты не куришь..

Елки-палки smile.gif
Да не сравнение меня интересует в данном случае, а операнды! Почему для них не работает интерпретирование и преобразование?

Спустя 1 час, 45 минут, 39 секунд (23.01.2010 - 10:22) baston написал(а):
Разобрался. Всем спасибо. Тему можно закрыть.

Спустя 3 часа, 45 минут, 24 секунды (23.01.2010 - 14:08) Platinum написал(а):
baston, всё понял) спс smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.