Включение скриптов внутри класса

korpus

злой бобёр
Включение скриптов внутри класса

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

class someclass
{

public function doit()
{
if ($a=1)
{
include_once("script.php");
echo $var;
}
}

}

В скрипте script.php определяется переменная $var. Но получается, что данная переменная не может использоваться! Скрипт подключается без ошибок, если в нём написать
echo "text"

то данный текст появится при обращении к функции doit(). Но подключить таким образом какие-то переменные у меня не получается. Функция работает так, как будто в скрипте script.php их не было. Как это исправить? И есть ли другой способ подключить к функции класса список переменных, вынесенных в отдельный скрипт.
 

dimagolov

Новичок
подключить к функции класса список переменных
для начала ты определись что за переменные ты хочешь объявить, узнай какие они бывают в ООП PHP5

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

korpus

злой бобёр
dimagolov
В стороннем скрипте выделены переменные, которые можно будет поменять. т.е. удобно поменять переменные в одном подключаемом скрипте, используемом на разных страницах, чтобы не менять их везде.
Я так думаю, что подключив таким образом скрипт с переменными, я просто их определяю в это функции.
Непонятно, почему, еслив скрипте написать echo "text", то работает, а если записать там переменную, то она не переносится из подключаемого скрипта.

-~{}~ 24.10.09 12:24:

iceman
Не хочется связываться с глобальными переменными. Может ещё какой-то способ есть?
 

akxxiv

Новичок
У тебя include_once("script.php"); т.е. скрипт будет подключен всего один раз, при этом все переменные, которые в нем определены будут локальными для данной функции, если ты сделаешь инклюд_уанс в другой функции, думаю он его уже не подключит. Хотя я не утверждаю это, просто в голову пришло...
 

Духовность™

Продвинутый новичок
Потому, что это усложняет понимание программы. Все подключаемые файлы должны быть вынесены где-то в одном месте, как в программе на С. Плюс ко всему, я просто не понимаю, зачем что-то инклюдить в функциях или классах. Шаблоны - может быть. Какие-то языковые файлы - возможно. Но включение скриптов должно быть прозрачно.
 

zerkms

TDD infected
Команда форума
triumvirat
почему бы не включать, например, файлы с конфигурацией внутри классов, которые работают с конфигурацией?

у человека, как раз, там получение каких-то данных.
да, возможно он не знает о <?php return $var
и $data = include 'file.php';

но это какбе не повод произносить такую категоричную чушь.
 

Духовность™

Продвинутый новичок
почему бы не включать, например, файлы с конфигурацией внутри классов, которые работают с конфигурацией?
Я о другом говорил, когда в теле класса или функции подключается другой какой-то код.
 

zerkms

TDD infected
Команда форума
triumvirat
даже если и так. что в этом такого? я так делаю иногда. есть какое-то разумное объяснение?

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

zerkms

TDD infected
Команда форума
некрасиво. зачот :)
форум эстетствующих программистов какой-то :)
 

dimagolov

Новичок
zerkms, выделяют в отдельный файл обычно что?
1. код, причем это обычно декларация класса (или ф-й), то есть то, что подключается однократно
2. шаблоны, то есть то, что генерит определенный вывод в определенном месте
3. данные

с случае п.3 это тоже имеет смысл делать однократно, в первую очередь из соображений производительности. если же к этим данным нужен доступ более чем из одного места, то ИМХО стоит подумать над вариантом включить их однократно и потом иметь к ним доступ из разных мест, это и с точки зрения расхода памяти лучше будет.

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

zerkms

TDD infected
Команда форума
dimagolov
это может говорить о том, что это обычная практика для среднего уровня программистов. вот и всё. человек увидел пхп неделю назад, а на него уже навалились с best practices. да он синтаксиса ещё не знает толком, какие нафиг классы? какой нафиг расход памяти?

давайте ему сразу посоветуем прочитать PoEAA от фаулера. чо, гулять так гулять.

-~{}~ 24.10.09 23:30:

На форуме с: Aug 2008
а, ёп )))))) лол
 

iceman

говнокодер
он вас не о (не-)правильности инклюдить что-либо в классе, а совсем о другом...

if ($a=1)
{
include_once("script.php");
echo $var;
}
и че в пемеренной $a? и зачем ты присваивешь значение в условие? что будет если сделать include?
 

dimagolov

Новичок
iceman, этот момент с одной стороны не существенен, include_once отработает в любом случае.

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

korpus, расскажи все же подробнее что за переменные, зачем они в отдельном файле и т.д.
 

korpus

злой бобёр
Ну и флуда развели...
Вывел в отдельный файл переменные... Ну три массива с переменными таким образом сделал. Каждый включает до 250 элементов. Разумно не засорять код и вывести все переменные в отдельный файл. При том что используются они практически на каждой странице сайта. А тут пришла необходимость на ООП все скрипты перевести, вот и мудохаюсь теперь.
Для меня включение скрипта инклюдом обычная практика.
Результат, кстати, аналогичный, если использовать include, include_once, require, require_once. Переменные в функциях класса не инициализируются.
Предполагаю, что прийдётся просто передать все эти переменные объекту при создании самого объекта, например в функции _construct(), но это будет для меня необычный метод..
zerkms
$data = include 'file.php';
А это что за синтаксис?
 
Сверху