2013-05-17 57 views
0

這是一個令我厭惡的設計問題,因爲內心深處我知道我做錯了。這不一定只是一個PHP問題,但我現在正在開發一個PHP項目,這就是我來自的地方。 我只是給你這個場景: 我有一個由數據訪問腳本使用的JSON生成類。基本上,它是實例化JSONGen類的網站的前往URL,後者依次查看靜態文件並提取請求的數據,然後將其作爲JSON對象發回。包含原始數據的文件全部採用數組格式,以便於閱讀和更新(因此不需要篩選原始JSON數據和風險語法錯誤等)。 我的問題是在訪問該文件。 我所做的是將一個require([json文件])放在類定義之外。 [json文件]中的所有內容都被分配給一個$ JSON對象。 在類的構造函數,我做的:包括vs擴展數據訪問

global $JSON; 
$this->JSON = $JSON; 

(其中$這個 - > JSON是一個私有類變量)。

這讓我可以從課堂的任何地方訪問JSON,這很可愛。 它感覺很不舒服,但我無法找到解決這種特定類型方法的任何地方。

的問題是,一旦有人決定移動類或什麼的,他們理解該文件的相關性是在有一個在頭一個需要聲明的唯一途徑。這只是事情的工作方式嗎?還是有更好的方法來做到這一點?

我應該使用擴展並將JSON放入類(對我來說這聽起來很愚蠢),還是繼續使用我的include?還是應該永遠不要在這樣的類中包含文件,而是將其傳遞給構造函數或其他訪問方法?

這種特殊的情況下是一個小項目,它只是沒有意義建立DB它。我們可以添加到文件中,修改配置,並且整個站點更新....所以請不要告訴我切換到DB-我從更一般的意義上尋找針對此特定問題的策略。

謝謝!

+0

所以,如果我正確理解包含結果在一個實例被創建?或者你創建一個全局實例? – Orangepill

+1

如果你正在創建一個單一的全局實例(創建一個實例,並在方法等內部對該變量調用global),那麼就把這個類變成一個靜態類。它會自動成爲全局的。 –

+0

@jonathanKuhn這就是我要去哪裏... – Orangepill

回答

0

大概會得到downvoted這一個,但這裏有雲......

class JSON_Response { 
     public static $JSON; 

     // don't let people make one of these it gives the illusion that there can be more then one 
     protected function __construct(){} 
} 

然後在文件

JSON_Response::$JSON = $json; 

和訪問,如果從任何地方JSON_Response::$JSON;

,如果有什麼你通常做的json對象(檢查一個標誌或什麼的),你可以添加一個靜態方法到JSON_Response類。