Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Странности с условием
 
 автор: Dino   (04.10.2008 в 17:00)   письмо автору
 
 


<?php
if ( $value == )
{
echo 
1;
}
?>

Предыдущий код ни чего не возвращает, а если после
if ( $value == 1 )
постаить точку с запятой
if ( $value == 1 );
, то напечатается единица. Почему так? И вообще, почему код работает с ;?

  Ответить  
 
 автор: cheops   (04.10.2008 в 17:09)   письмо автору
 
   для: Dino   (04.10.2008 в 17:00)
 

Все правильно. Если $value не равно 1, то условие не срабатывает. Ничто не запрещает вам создавать оператор if() без тела, следующая запись вполне допустима:
<?php
  
if ( $value == );
?>

Ни что также не запрещает вам создавать составной оператор - один или более операторов, заключенных в фигурные скобки - для этого не обязательны операторы цикла и ветвления. Следующая запись вполне допустима:
<?php

  echo 
1
}
?>

Таким образом, ставя точку с запятой, вы получаете два оператора, которые действуют независимо друг от друга. if() - сравнивает и по результату сравения ничего не делает, а echo в фигурных скобках каждый раз выводит единицу в окно браузера.

  Ответить  
 
 автор: Николай2357   (04.10.2008 в 17:13)   письмо автору
 
   для: Dino   (04.10.2008 в 17:00)
 

А что тут странного? Точка с запятой заканчивает блок. По другому это можно написать так
<?php 
if ( $value == 
{
}

echo 
1

?>
В блоке с условием ничего не выполняется, а в следующем выполняется. Если ; нет, то при $value == 1 (а она естественно не равна, так как null) блок выполняться не будет.

  Ответить  
 
 автор: Trianon   (04.10.2008 в 17:17)   письмо автору
 
   для: Николай2357   (04.10.2008 в 17:13)
 

точка-c-запятой никакой блок не заканчивает.
точка-с-запятой заканчивает оператор вычисления выражения (который в частном случае может быть пустым.)

  Ответить  
 
 автор: Николай2357   (04.10.2008 в 19:24)   письмо автору
 
   для: Trianon   (04.10.2008 в 17:17)
 

Автор, судя по вопросу, может и не знать, что оператор вычисления, если он один, не обязательно заключать в фигурные скобки. Абстрактно можно представить это как блок, состоящий из одного оператора. Что я и хотел для наглядности продемонстрировать, заключив в фигурные скобки пустоту.
По правде говоря, я не стал бы отвечать вторым, первый ответ более исчерпывающий, но получилось "синхронное плавание"...

  Ответить  
 
 автор: Trianon   (04.10.2008 в 19:44)   письмо автору
 
   для: Николай2357   (04.10.2008 в 19:24)
 

>Автор, судя по вопросу, может и не знать, что оператор вычисления, если он один, не обязательно заключать в фигурные скобки.

Любой оператор необязательно заключать в фигурные скобки.

>Абстрактно можно представить это как блок, состоящий из одного оператора.

Нельзя. Блок это вообще не из этой оперы. Последовательность операторов, объединенных фигурными скобками корректно называется составным оператором. А вовсе не блоком.

>Что я и хотел для наглядности продемонстрировать, заключив в фигурные скобки пустоту.

Я не заметил здесь наглядности.

  Ответить  
 
 автор: Николай2357   (04.10.2008 в 19:52)   письмо автору
 
   для: Trianon   (04.10.2008 в 19:44)
 

>Любой оператор необязательно заключать в фигурные скобки.
В данном случае речь шла именно об этом операторе.

>Нельзя.

Почему? Абстрактно можно все представить, даже электричество в виде водопровода.

>Последовательность операторов, объединенных фигурными скобками корректно называется составным оператором. А вовсе не блоком.

Весьма вероятно, однако во многих мануалах это называют именно так. Впрочем, суть от этого не меняется.

>Я не заметил здесь наглядности.

И здесь не стану спорить. С Вашей рациональностью это совсем не наглядный пример, как раз наоборот. А вот новичку, такому как я к примеру, гараздо наглядней, когда за выражением идут фигурные скобки.

  Ответить  
 
 автор: Dino   (04.10.2008 в 20:22)   письмо автору
 
   для: Николай2357   (04.10.2008 в 19:52)
 

Спасибо вам всем. Теперь разобрался.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования