Почему обязательно надо заключать include в фигурные скобки в условном блоке

MVH

Новичок
Почему обязательно надо заключать include в фигурные скобки в условном блоке

В мануале по include (http://ru.php.net/manual/ru/function.include.php) написано:
PHP:
<?php

// This is WRONG and will not work as desired.
if ($condition)
   include $file;
else
   include $other;


// This is CORRECT.
if ($condition) {
   include $file;
} else {
   include $other;
}

?>
Приведите, пожалуйста, кто-нибудь пример, когда первый вариант будет работать неправильно. Ума не приложу в какой ситуации это может произойти...:confused:
 

Raa

Новичок
допустим, $file содержит:
Код:
echo 1;
echo 2;
echo 3;
Теперь подставь в свой код:
Код:
if ($condition)
   include $file;
Получаем:
Код:
if ($condition)
echo 1;
echo 2;
echo 3;
Может быть именно поэтому? :)
 

Balloon

Новичок
Представь что инклуд просто вставляет исходник другого файла в исходник файла из которого данная команда была вызвана.
если вставляемый файл содержит больше одной строчки кода то в первом случае произойдет следующее:
PHP:
// This is WRONG and will not work as desired.
if ($condition)
   code_line_1;
   code_line_2;
   ....
else
   code_line_1;
   code_line_2;
   ....
Ессесно после етого произойдет ошибка...
 

Raa

Новичок
Вообще это бред. И звучит такое предположение совсем бредово. И попробовал даже, и убедился в том, что сам написал полный бред. :) В данном случае include работает подобно функции. Так что тема не раскрыта. У кого еще будут предположения? :)
 

master_x

Pitavale XXI wieku
Raa
в мануале по этому поводу все очень подробно описано.
 

Фанат

oncle terrible
Команда форума
master_x
может, мы с тобой разные мануалы читаем?
В моём написано только Because include() are special language construct.
или я не там читаю?
 

SiMM

Новичок
> Дай ссылочку на свой мануал плиз.
... с цитатой... а то мало ли что ;)
 

MVH

Новичок
Автор оригинала: Balloon
Представь что инклуд просто вставляет исходник другого файла в исходник файла из которого данная команда была вызвана.
если вставляемый файл содержит больше одной строчки кода то в первом случае произойдет следующее:
PHP:
// This is WRONG and will not work as desired.
if ($condition)
   code_line_1;
   code_line_2;
   ....
else
   code_line_1;
   code_line_2;
   ....
Ессесно после етого произойдет ошибка...
Подобная ситуация - это первое, что мне пришло в голову и я испробовал всевозможные варианты: и с URL fopen wrappers и без него и с инклудом в инклуде - всё нормально работало...
Я вот думаю, может такая ошибка была только в ранних версиях php?
 

WP

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

Фанат

oncle terrible
Команда форума
Интересно, кто-нибудь прольёт свет на этот пункт мануала?
Сказанное там верно, если заменить инклюд на код.
А с инклюдом у меня не получилось вызвать ошибку.
 

Skubent

Новичок
Ноги растут от 3-й пхп, где алгоритм обработки инклюдов был как раз такой, как описано.
http://ru.php.net/manual/ru/migration4.parser.php
 

tony2001

TeaM PHPClub
Фанат
Skubent
похоже, что вы правы.
как-то материально можете доказать, чтобы я был на 100% уверен перед тем, как убирать этот пример из мануала?
 

svetasmirnova

маленький монстрик
tony2001
PHP:
5.php:
<?php
if (1)
   include '5_1.php';
else
   include '5_2.php';
?>
5_1.php:
<?php
class A {}
if (1)
	echo 1;
else
	echo 2;
?>
5_2.php:
<?php
class A {}
echo 3;
echo 4;
?>
 

svetasmirnova

маленький монстрик
1 =)
На самом деле было много текстов с фигрными скобками и без, а также с if (0) в 5.php с интуитивно ожидаемым результатом.
 
Сверху