require_once && require

myname

Guest
require_once && require

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

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

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

Crazy

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

А то если просто яйца чешутся, то помощь общественности здесь вроде как не нужна. Ага?
 

Кром

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

Screjet

Новичок
Пример многоразового инклюда:

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

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

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

Crazy

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

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

Screjet

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

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

2автор, обычно 1 файл = 1 описанию класса/модуля(группы классов). Такой подход я бы назвал стандартным.
 

Jok

Guest
вообще советовал бы сделать так ...
написать файл global.php скажем где будет подключаться все твои классы и тд... через reuqire_once
и потом этот global.php подключать в любом нужном тебе файле...
вот и все....
 

Screjet

Новичок
Не нужно советовать неудачные решения. Включать код нужно по мере необходимости.
 

Кром

Новичок
Screjet а как ты обычно вычисляешь необходимость подключения того или иного файла? Если ты, конечно, делаешь это программно.
 

Jok

Guest
не думаю что мое решение так уж и не удачно.....
конечно я говорю со своей точки зрения...
у меня проекты такие просто что надо делать так как я сказал ранее
 

Screjet

Новичок
Originally posted by Кром
Screjet а как ты обычно вычисляешь необходимость подключения того или иного файла? Если ты, конечно, делаешь это программно.
Конечно програмно. По событиям и условиям. Авторы событий = обычно веб-пользователи. Условия = обычно права и приоритеты.

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

Кром

Новичок
>Авторы событий = обычно веб-пользователи. Условия = обычно права и приоритеты.

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

Screjet

Новичок
дополнительные классы для работы с отдельными разделами
Это модули/компоненты раздела. Фактически часть раздела, но они могут быть в различных вариациях.

Экономия во времени на разбор пхп-кода зенд-машиной или десериализацию опкода ускорителем.
 

Jok

Guest
2 Screjet
ну вообще да это и имелось ввиду...
что загружаеться базовые какие модули глобальные для все проекта..
а отдельные конечно только в случае необходимости
 

crocodile2u

http://vbolshov.org.ru
Наступает время PHP5. Для классов - autoload(); для либ - require(include)_once(), для остального - либо ..._once(), либо просто ...

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