[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос о символе =
realyhead
Почему, когда
<?php
$a=0; $b=1;
if ($a=$b) echo "a и b одинаковы";
else echo "a и b различны";
?>

То выводится, что "а и b одинаковы"
Но когда:
<?php
$a=1; $b=0;
if ($a=$b) echo "a и b одинаковы";
else echo "a и b различны";
?>

То пишет, что "а и b различны"?
realyhead
Насколько понимаю, то = это оператор присваивания. При присваивании а к b в 1м случае мы получаем a=1 и b=1 то первое утверждение верно, но во 2 случае ведь происходит тоже самое a к b получаем a=0 и b=0, но здесь уже различны.
volter9
realyhead
"=" это оператор присваивания, в первом варианте, из за того что в if'е присваивания произошло успешно и значение является правдивым (1), то if срабатывает, во втором варианте присваивания тоже срабатывает, но значение которое присваевается, оно ложное (0). Используйте '===' (оператор идентичного сравнение) вместо оператора присваивания в данном контексте.

Почитайте о преобразование в булев тип в PHP.

_____________
Мой блог
realyhead
Цитата (volter9 @ 17.01.2015 - 21:08)
realyhead
"=" это оператор присваивания, в первом варианте, из за того что в if'е присваивания произошло успешно и значение является правдивым (1), то if срабатывает, во втором варианте присваивания тоже срабатывает, но значение которое присваевается, оно ложное (0). Используйте '===' (оператор идентичного сравнение) вместо оператора присваивания в данном контексте.

Почитайте о преобразование в булев тип в PHP.

Понял, исходя из информации из ссылки
Цитата
Однако, в большинстве случаев приведение типа необязательно, так как значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует boolean аргумент.

Но ведь в примере конструкция не требовала boolean аргумент, там ведь не было =true или =false и т.п.
И в целом, почему так получается, это такая особенность языка?
volter9
Нет, это умеет не только PHP, это вроде бы особенность динамически типизированных языков. 1 и 0 преобразуются в булев, т.е. в true (1) и false (0) внутри if'а.

_____________
Мой блог
realyhead
Извиняюсь, что навалился с вопросами, но подскажите правильно ли я понимаю работу цикла for:

<?php
for($i=1;$i<=10;$i++){
if ($i==10) echo "$r";
else echo "$n";
}
?>

Я понимаю так, что пока $i меньше 10 и пока она не будет равна 10 будет выполняться то, что в скобках? Правильно ли это?

Но когда пишу
for($i=0;$i>10;$i++){
echo "+++";}

То в моём понимании пока $i не будет больше 10 , т.е. в данном случае 11 будет выводиться строчка "+++", но страница пустая.
Так как на самом деле понять как действует цикл?
realyhead
Что-то вообще туплю- въехал. пока $i не "не будет больше 10" а просто пока $i больше 10 выполнять цикл и прибавлять к $i по еденице, но уже на начально этапе $i не больше 10 и получается логики не верна.
mvg
Цитата (realyhead @ 17.01.2015 - 20:39)
правильно ли я понимаю работу цикла for:

<?php
for($i=1;$i<=10;$i++){
if ($i==10) echo "$r";
else echo "$n";
}
?>


Для $i равное 1 выполнять тело цикла
пока $i меньше либо равно 10.
После выполнения тела цикла $i увеличить на единицу.


Цитата
Так как на самом деле понять как действует цикл?


прочитать инструкции для компилятора/интерпритатора на русском языке в порядке их следования.
realyhead
<html>
<
head>
<
title>PHP</title>
</
head>
<
body>
<
form method="POST" action="<?=$_SERVER['SCRIPT_NAME']?>">
Логин<br><input type="text" name="login">
<
br><br>
Пароль<br><input type="password" name="pass">
<
br><br>
<
input type="submit" name="go" value="Регистрация">
<?php
if (isset($_POST['go']) AND $_POST['login']!=="" OR $_POST['pass']!==""){
echo "Данные приняты";
}
else{
if (isset($_POST['go']) AND $_POST['login']=="" OR $_POST['pass']=="") echo "Не приняты";
}
?>
</form>
</
body>
</
html>


Но при входе на страницу сразу пишется "Данные приняты", хотя условие ещё не выполнилось, в чём может быть проблема?
Быстрый ответ:

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