2013-08-12 39 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

我剛剛發現功能的定義總是有一個全球範圍的http://www.php.net/manual/en/functions.user-defined.php

所以,問題是下降到變量,只有:如果我只是在我的inclues聲明每個variabile的作爲global前的包括那個應該做的訣竅。這有點不方便,這會消除一些被愛的抽象,但我認爲這是唯一的方法。

+0

你不應該混合函數聲明和變量。把你的函數放在一個你可以包含的單獨文件中,而不用擔心範圍,並在需要它們的地方創建你的變量。 – deceze

+0

這超出了我的控制範圍:我包含的文件來自不同的項目,不受我控制(是phpBB的)。 –

1

功能定義將爲總是全局。 .........

+0

...除非命名空間 – Mchl

+1

@Mchl如果它們是命名空間,它們也是全局的。命名空間與作用域無關 – hek2mgl

+0

我會對此說'是和不是'。確實:它與變量作用域無關,如上面鏈接的手冊頁所述。然而命名空間函數將優先於它們聲明或導入到的命名空間中的非名稱空間函數。 – Mchl

相關問題