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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнение include из класса 
:(
    Опции темы
anthonyBoard
Дата 7.11.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

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



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

Просто если она будет жить пока жив класс, то можно инклудить всегда относительно одной и тойже функции класса.
PM MAIL   Вверх
sTa1kEr
Дата 7.11.2008, 21:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

Репутация: 11
Всего: 146



Цитата(ksnk @  7.11.2008,  01:38 Найти цитируемый пост)
sTa1kEr, Мне показалось, что система ориентирована на пользователей, плохо знающих PHP. Вероятнее всего, они при этом недостаточно четко смогут себе представить что такое паттерны программирования

Если "плохо знающие PHP" не смогут вызвать статический метод, то это не "плохо знающие PHP", а "абсолютно ничего знающие в PHP".

Цитата(anthonyBoard @  7.11.2008,  02:39 Найти цитируемый пост)
template.php
<div><? print "{$someclass->some} {$someclass->some_2}!"; ?></div>

Ну так, а что тут мешает через $this обращаться? Посмотрите как сделаны View-контролеры в Zend Framework-e http://framework.zend.com/manual/en/zend.view.html 
Цитата(anthonyBoard @  7.11.2008,  03:50 Найти цитируемый пост)
Этот пользователь должен просто написать $someclass->doit();

А что ему мешает писать Someclass::getInstance()->doit(); ?

Цитата(anthonyBoard @  7.11.2008,  14:20 Найти цитируемый пост)
Просто если она будет жить пока жив класс, то можно инклудить всегда относительно одной и тойже функции класса. 

Как вы это себе представляете? Функция закончила свою работу, а локальные переменные остались? Хотя, если конкретные переменные объявить статическими, то они действительно будут доступны при следующем вызове функции.

Хотя возможно сохранять все локальные переменные и разворачивать их обратно есть (см. мой первый пример), но, повторюсь, это моветон, и может привести к серьезным логическим ошибкам и накладным расходам.
PM MAIL   Вверх
anthonyBoard
Дата 8.11.2008, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

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



Да, наверное я загнался конечно на какую-то идеальность. Ладно, если ничего хорошего по структуре не придет на ум, то пусть через $this обращаются или пусть global делают вначале include.

Спасибо всем, кто участвовал в дискуссии этого топика! Если у кого-нибудь буду еще какие идеи - буду раз их увидеть здесь! Еще раз спасибо!
PM MAIL   Вверх
anthonyBoard
Дата 8.11.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

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



Как на счет только чтобы все темплейты обхединять в один и делать потом eval? Т.е. в каждом темплейте будет содержаться какое-то обозначение типа "[TEMPLATE-2]" и будет заменяться кодом соответствующего темплейта из файла, а потом eval'ом все будет выполняться. Получается все переменные будут доступны на одном уровене, что и требовалось.
Как вам такая мысль?

Не будет ли это тормознутее, чем это делалось сразу include?

ну и другой вариант забить на все переменные, которые могут возникнуть во время выполнения определенного темплейта и заставить пользователя делать их global, если он планирует где-то дальше их использовать.

На счет eval еще не уверен вот в чем.. Не поплывет ли дебагер?
PM MAIL   Вверх
awers
Дата 8.11.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

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



а как на счет smarty?

Добавлено через 41 секунду
И раздел тоже по итогу не верно выбран )) Для профи - это не то что надо )
PM MAIL WWW ICQ Skype   Вверх
anthonyBoard
Дата 8.11.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

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



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

Всем спасибо за участие в этой теме!
PM MAIL   Вверх
anthonyBoard
Дата 10.11.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

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



К вопросу по теме! Если в php 5.3 будет namespace - то тогда станет возможным реализовать поставленную задачу изначально, я правильно понимаю?
PM MAIL   Вверх
sTa1kEr
Дата 13.11.2008, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

Репутация: 11
Всего: 146



module1.php
Код

$a = basename(__FILE__);
$b = 123;
$c = array('test');

module2.php
Код

var_dump($a, $b, $c);

main.php
Код

class Includer
{
    private $localScope = array();
    
    public function load($file)
    {
        extract($this->localScope);
        include $file;
        $this->localScope = get_defined_vars();
        unset($this->localScope['this'], $this->localScope['file']);
    }
}

$includer = new Includer();
$includer->load('module1.php');
$includer->load('module2.php');

Вывод:
Код

string(11) "module1.php"
int(123)
array(1) {
  [0]=>
  string(4) "test"
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

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


 




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


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

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