Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> повторный include, как избежать? 
:(
    Опции темы
MakNik
Дата 21.8.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 5.4.2006

Репутация: нет
Всего: 0



В файле tools.php описаны несколько ф-ций. И в зависимости от условий он либо включается либо нет. 
Подскажите, плз., как проверить выполнялась ли уже команда include  "tools.php" для избежания повторного вкючения файла tools.php?
PM   Вверх
Mal Hack
Дата 21.8.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Использовать include_once(), а лучше скрипт по грамотнее спроектировать.

PM ICQ   Вверх
Guedda
Дата 21.8.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



Использовать надо include_once либо require_once...


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
szz
Дата 21.8.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Или, если хочешь вообще bulletproof делай так (примерно как в С делаем):
Код

// файл tools.php
if(!defined('__TOOLS_PHP__')){
   define('__TOOLS_PHP__', true);
   // тут весь код твоего tools.php
}


теперь неважно чем, include или include_once ты используешь - все равно только раз включится.


--------------------
PM   Вверх
Mal Hack
Дата 21.8.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Подключится он столько раз, сколько его вызовет пользователь.
PM ICQ   Вверх
szz
Дата 21.8.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Фактически - да, но код внутри if(!defined...   - только раз.


--------------------
PM   Вверх
vasac
Дата 21.8.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Тогда уж
if ( defined( '__TOOLS_PHP__' ) ) return;

PM WWW   Вверх
Mal Hack
Дата 21.8.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(szz @  21.8.2006,  17:59 Найти цитируемый пост)
Фактически - да, но код внутри if(!defined...   - только раз. 

Код подключится. Другое дело, что он не выполнится.
Зачем все это, кгогда проще спроектировать скрипт грамотнее или _once использовать.
PM ICQ   Вверх
szz
Дата 21.8.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Цитата

if ( defined( '__TOOLS_PHP__' ) ) return;

  и куда мы вернемся? Это ведь тебе не функция.

Добавлено @ 19:22 
Цитата
Зачем все это, кгогда проще спроектировать скрипт грамотнее или _once использовать. 

   Это нормальная практика, так делается в C и C++ повсеместно:
Код

#ifndef __TOOLS_CPP__
#defined __TOOLS_CPP__
// blablabla тут море строк кода
#endif

 и вполне законно также и в PHP. Это точно гарантирует, что код включится один раз, что бы ты не использовал include или include_once.
   По идее include_once - как видно из неуклюжего написания - это своего рода хак, попытка зашить белыми нитками недотепы PHP, такой же как и, например необходимость писать global внутри функции.
   Как раз то, что я привел - безопаснее и закономернее, чем использование include_once. По закону Мерфи, если есть возможность использовать include (не _once) - то кто-то обязательно когда-нибудь так и сделает.
    Посмотри историю развития синтаксиса С-образных языков (PHP - один из них, наряду с perl, C++, java, javascript, C# и тд)

 


--------------------
PM   Вверх
vasac
Дата 21.8.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата(szz @  21.8.2006,  19:13 Найти цитируемый пост)
 и куда мы вернемся?

А вернемся мы в файл из которого инклюдили.
Причем include() вернет результат из этого ретурна.

http://ru.php.net/return


Цитата(szz @  21.8.2006,  19:13 Найти цитируемый пост)
  Это нормальная практика, так делается в C и C++ повсеместно:

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


Цитата(szz @  21.8.2006,  19:13 Найти цитируемый пост)
то кто-то обязательно когда-нибудь так и сделает

Да плевать на него. Кто-нибудь и винт себе отформатирует случайно.
Использует он include лишний раз, выскочит ему "дубле дефайн", он исправит и все проблемы.
PM WWW   Вверх
szz
Дата 21.8.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Не знал про return, спасибо )))  Там даже так(!): 
Цитата
If called from the global scope, then execution of the current script file is ended. 
!

   Да и ненамного времени больше потратится - все, что интерпретатору нужно будет сделать, это пробежать по всем символам и проиндексировать симметричные "{}" - а это всего лишь несколько сот тактов smile

Цитата
В Си это делается за неимением лучшего.
 Ну, если ты уж взялся Си критиковать - то что уж тут сказать )))  Одно знаю - тот язык считается одним из наиболее продуманных и спроектированных их всех. Но, если ты считаешь, что PHP более продуманный - smile

Добавлено @ 19:43 
А вот вопрос вдогонку по return: например у меня есть файл a.php:
Код

if($la==1)return 123;

и включается он так:
Код

function lala(){
   $la=1;
   include('a.php');
}

куда вернется? В функцию или функция это вернет?


--------------------
PM   Вверх
S.A.P.
Дата 21.8.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 3
Всего: 71



Цитата(szz @  21.8.2006,  19:13 Найти цитируемый пост)
#ifndef __TOOLS_CPP__
#defined __TOOLS_CPP__
// blablabla тут море строк кода
#endif

это называется стражи включения и используются они в C только потому, что там require_once нет. Поэтому не стоит тащить тяжелое наследие в язык более высокого уровня  smile .
PM MAIL   Вверх
vasac
Дата 21.8.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата(szz @  21.8.2006,  19:40 Найти цитируемый пост)
Ну, если ты уж взялся Си критиковать

Я обожаю Си.
И люблю php.
Но у него своя специфика. Зачем тащить из Си в php, то что в нем реализовано лучше.
Некоторые даже выводят в пыхе постоянно через printf(). Кошмар.


Цитата(szz @  21.8.2006,  19:40 Найти цитируемый пост)
куда вернется? В функцию или функция это вернет? 

Это вернет include().

Код

$ret = include( 'a.php' );

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.