![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Icaros |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 26.5.2006 Репутация: нет Всего: нет |
Добрый день.
Есть класс, который предназначен для формирования html страницы и вывода кода на экран (в смысле, echo). Есть функция (не в классе), которая генерирует ошибки (в случае их возникновения) и передает информацию вышеупомянутому классу. Суть проблемы: файл с функцией загружается первым (require_once в смысле), затем загружается файл с классом и инициируется сам класс (в смысле $tmpl = new ...). В функции для генерации ошибок я ставлю строку
Вопрос вот в чем: когда загружается файл с функцией, но сама функция еще никем не вызвана, инициируется ли внутри переменная $tmpl. Из функции я не могу воспользоваться ни одним методом, как будто такого класса нет, хотя никакой ошибки (это точно, проверял) не выдается. А после того, как класс инициирован (в смысле $tmpl = new ...) всем можно воспользоваться. Пример: файл funct.php
файл index.php
файл class.php
Если в файле index.php добавить в конце $tmpl->add_to_body('some text...'), то все работает, а если внутри функции show_error() вставить $tmpl->add_to_body('some text...'), то не работает (в смысле переменная $html['body'] пуста), хотя эта функция в процессе работы вызывается. Это сообщение отредактировал(а) Icaros - 13.9.2006, 13:04 |
||||||||
|
|||||||||
| AztEK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 723 Регистрация: 4.1.2005 Репутация: 6 Всего: 18 |
Ты неправильно понимаешь суть конструкции global.
Все глобальный переменные расположены в супермассиве $GLOBALS. Они видны вне функций (не важно, обычных или методов класса), у самих функций другая область видимости. Для этого и юзается global. Конструкция
По сути обозначает вот что:
Т.е. мы берем переменную (точнее ссылку) из суперглобального массива и присваиваем её новой переменной. Как видишь, переменная НЕ создаётся. Она берется из GLOBALS, куда мы её ложим в твоём случае с помощью оператора new. Из-за этого твой код и не работает. Объект $tmpl надо определить перед вызовом ф-ции. -------------------- Linux is like wigwam -- no windows, no gates, apache inside. |
||||
|
|||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
Icaros, возможный путь решения:
сохраняй ошибки во внутренней статичной переменной функции ошибок если не найден класс (isset($tmpl)) если ж найден скидывай из переменной в обьект $tmpl |
|||
|
||||
| Icaros |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 26.5.2006 Репутация: нет Всего: нет |
|
|||
|
||||
| AztEK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 723 Регистрация: 4.1.2005 Репутация: 6 Всего: 18 |
Перечитай мой первый пост. При использовании global переменные не создаются, а берутся уже инициализированные. Так что да, не инициализируются. -------------------- Linux is like wigwam -- no windows, no gates, apache inside. |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
Icaros, четвертый так вообще не интепретирует в изначальном смысле
а сначала компилирует, и выполняет. отнесись к global как к оператору расширения области видимости переменной. а НЕ как к оператору создания, копирования или еще чтолибо. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |