require_once && require

  • Автор темы Автор темы myname
  • Дата начала Дата начала

myname

Guest
require_once && require

Что разумнее (~благоразумнее) и почему?

1. вариант:
использовать require_once (~include_once)
и "забить" (с умом, разумеется) на то, будет ли происходить включение одного и того же скрипта несколько раз

2. вариант:
допустим в некотором "основном" классе написать функцию на подобии:
PHP:
function incFile( $name ) {
    if ( !class_exists($name) ) {
         require( "{$this->inc_dir}/$name" );
    }
}

или не существенно, что конкретно ипользовать?
заранее спасибо.
 
myname, назови хоть одну причину не пользоваться require_once (кстати, причем здесь "включение несколько раз"?) и мы с удовольствием обсудим альтернативы.

А то если просто яйца чешутся, то помощь общественности здесь вроде как не нужна. Ага?
 
Лучше решать это на уровне подключения файлов. Но при этом получше продумать логику, чтобы все работало и при require.
 
Пример многоразового инклюда:

Есть некий шаблон, скажем еденицы товара, в котором хтмл еденицы, а в пхп-тегах вывод переменных. Так вот для вывода нескольких едениц, меняем переменные в пространстве имени (ф-ции/метода/класса) и инклюдим.

зы. Небось уже подзабыли, что можно инклюдить не только пхп-код;)

Забыл добавить: назначение у (require|include) и (require|include)_once разное.
Обычно посредством (require|include)_once включается пхп-код (ф-ции/модуль), а без _once = включается HTML-код.
 
Screjet, читай внимательно: "использовать require_once (~include_once) и "забить" (с умом, разумеется) на то, будет ли происходить включение одного и того же скрипта несколько раз"

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

Автор треда несколько некорректно выразился, но понять можно. Имелось ввиду "вызовы разовых включений". На то они и разовые, чтобы обойти ошибки дублирования (ф-ций/классов) при множественных включениях.

2автор, обычно 1 файл = 1 описанию класса/модуля(группы классов). Такой подход я бы назвал стандартным.
 
вообще советовал бы сделать так ...
написать файл global.php скажем где будет подключаться все твои классы и тд... через reuqire_once
и потом этот global.php подключать в любом нужном тебе файле...
вот и все....
 
Не нужно советовать неудачные решения. Включать код нужно по мере необходимости.
 
Screjet а как ты обычно вычисляешь необходимость подключения того или иного файла? Если ты, конечно, делаешь это программно.
 
не думаю что мое решение так уж и не удачно.....
конечно я говорю со своей точки зрения...
у меня проекты такие просто что надо делать так как я сказал ранее
 
Originally posted by Кром
Screjet а как ты обычно вычисляешь необходимость подключения того или иного файла? Если ты, конечно, делаешь это программно.
Конечно програмно. По событиям и условиям. Авторы событий = обычно веб-пользователи. Условия = обычно права и приоритеты.

JOk, может ты имел ввиду базовый набор модулей, типа обработчик БД, языков, коротые глобальны во всем проекте, тогда согласен. Но, например, модуль сессий нужен только когда сессия открыта, а модуль привелегий, только когда у пользователя есть привилегии.
 
>Авторы событий = обычно веб-пользователи. Условия = обычно права и приоритеты.

Т.е. базовый набор классов загружается в любом случае. Остаются некоторые дополнительные классы для работы с отдельными разделами, я так понимаю? И в чем же выражается экономия, в каких цифрах?
 
дополнительные классы для работы с отдельными разделами
Это модули/компоненты раздела. Фактически часть раздела, но они могут быть в различных вариациях.

Экономия во времени на разбор пхп-кода зенд-машиной или десериализацию опкода ускорителем.
 
2 Screjet
ну вообще да это и имелось ввиду...
что загружаеться базовые какие модули глобальные для все проекта..
а отдельные конечно только в случае необходимости
 
Наступает время PHP5. Для классов - autoload(); для либ - require(include)_once(), для остального - либо ..._once(), либо просто ...

А вообще, имхо, тема высосана из пальца
 
Сверху