2013-08-12 3 views
0

Я строю небольшую обертку для некоторого кода phpBB (эти методы будут вызываться из разных частей проекта).включают внутри метода: исправление для ограниченного объема?

Проблема заключается в том, что из-за http://php.net/manual/en/language.variables.scope.php все, что я включаю в свою оболочку, имеет только этот метод.

Здесь упрощенной и соответствующей части:

public function usePhpBBUsers($phpbb_root_path) 
    { 
    include($phpbb_root_path . 'common.php'); 
    include($phpbb_root_path . 'includes/functions_user.php'); 

    $user->session_begin(); 
    $auth->acl($user->data); 
    $user->setup(); 
    } 

можно обойти объем переменных с global, но те, включает в себя определение функции импорта, тоже.

Идеи?

+0

Вы пытаетесь использовать ключевое слово 'global'? – Ibu

+1

@Ibu Вы прочитали вопрос? – deceze

ответ

0

Я только что узнал, что функции определения всегда имеют глобальный-Scope http://www.php.net/manual/en/functions.user-defined.php

Таким образом, проблема вниз к переменным только: если я просто объявить каждый variabile в моих inclues, как global перед включают, что следует делать Хитрость. Немного неудобства, и это удаляет любимую абстракцию, но я думаю, что это единственный способ.

+0

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

+0

Это не под моим контролем: файл, который я включаю, из другого проекта, из моего контроля (это phpBB). –

1

Определения функций будут всегда глобальными. .........

+0

... если namespaced – Mchl

+1

@Mchl, если они являются именами, они также являются глобальными. Namespacing не имеет ничего общего с областями – hek2mgl

+0

Я бы сказал «да и нет». Правда: он не имеет ничего общего с областью переменных, как описано на странице руководства, приведенной выше. Однако функции с именами будут иметь приоритет над функциями, не содержащими имен, в пространстве имен, в которое они объявлены или импортированы. – Mchl

Смежные вопросы