2015-11-04 120 views
-1

我安裝了SMF論壇,這是一個非OO應用程序。我希望在論壇內的目錄中創建一個額外的應用程序,其中包括來自SMF的SSI文件,然後使用SMF內部的功能,但是在面向對象的設置中。使用OO應用程序獲取全局變量

如果這是不可能的,那麼停止閱讀這裏請解釋原因,因爲我努力工作了什麼是錯在這裏(可能是事實,我已經清醒幾乎24小時)

所以這是我:

SMF有一個文件,SSI.php - 當包括在內,這個設置全局變量的負載,並且還設置的

define('SMF', 'SSI'); 

的定義我有一個名爲控制檯文件夾,它有一系列的文件。從index.php文件,我打電話給我的Servlet文件,裏面有

require_once '../SSI.php'; 

class Servlet 
{ 

    public function __construct(){ 

    } 

    public function processRequest(){ 
     echo SMF; 
     var_dump($context) //This is the global variable that should be set 
    } 
} 

這SSI輸出,然後未定義的變量錯誤。

這可能真的很明顯,但爲什麼定義被設置,而不是上下文全局?如果我在課外做這個,那就行了。

謝謝!

CNC中

只是爲了說明爲什麼這不是鏈接的問題的副本......我真的不認爲它需要其他太多的解釋比這是關於特定範圍問題的一個具體問題以及針對我的應用程序的特定錯誤,這是OO和程序編程的混合體,會導致一些混淆。

我的問題不是「什麼是可變範圍?」

謝謝。

+1

嘗試在您的'var_dump($ context);'之前放置'global $ context;'。這是一個非常糟糕的做法,但只要全局變量不在較低的範圍內,就可以完成工作。更好的選擇是通過調用方法 –

+0

時需要的變量哦,我需要睡眠,這是如此明顯,現在我踢我自己這麼辛苦。謝謝,哈哈。 –

回答

2

如我的評論中所述,您可以在調用它之前放置global $context;,但這是非常糟糕的做法,可能會導致大型項目中的巨大問題。更好的選擇是必需的變量的方法傳遞被稱爲,例如:

<?php 
require_once '../SSI.php'; 

class Servlet 
{ 

    public function __construct(){ 

    } 

    public function processRequest($context){ 
     echo SMF; 
     var_dump($context); 
    } 
} 
$servlet = new Servlet(); 
$servlet->processRequest($context); 

它是不是在你的代碼示例工作的原因是因爲當一個類實例化時,它會創建一個平行的範圍在全局範圍內,因此您的$context變量在類中不存在,除非您通過參數將其放在那裏,或者通過使用global修飾符告訴php查找變量的範圍。

+0

非常好,非常感謝。我對OOP相當陌生,所以在涉及範圍時我就進行了修改,並沒有認爲只是將它作爲參數傳遞給它。 –

0

您的定義變量內容與括號之間缺少'。也許這是一個複製&粘貼錯誤,但只是要確保。