2013-01-31 137 views
0

確定這可能是一個簡單/ noobish的問題,但不能找出...PHP變量訪問

我有一個類,我至極包括在另一個PHP腳本。

所以,我打電話給例如$user->login,但如果我想創建一個函數並使用這個變量$user或任何其他變量定義的函數外,我需要在函數內聲明它的GLOBAL。

有沒有辦法在外部函數中聲明一次GLOBAL,而是在我需要的每個函數中聲明它?

回答

3

不是,不。根據情況你可以做一些可怕的事情,但一般來說,只需使用global即可。如果你發現這是一個問題,你可能有太多的全局變量或者因爲錯誤的原因而使用它們,你應該考慮把它們放入類中(例如)。


而且,只爲它赫克說,可怕的事情如下(在恐怖的順序排列):

  • user功能,每次調用它,你需要的$user全球
  • user類和一個共享的狀態是指一切靜態,因爲PHP通常沒有線程反正
  • 使用runkit得到變量視爲超全局
  • 覆蓋現有超全局
+0

minitech,出於興趣,因爲我已經在幾個代碼庫中看到了這一點,您的第一個非建議的恐怖是什麼? –

+0

@RickBurgess:這往往是錯誤的做法。如果沒有其他選擇,它可能是一種可以接受的風格選擇,但功能有時會更好,因爲在我看來,這通常是他們所代表的。 (但也許這不適用於像Wordpress這樣的項目?[不是所有人都同意它的理想結構:)]) – Ryan

1

...如果我想創建一個函數,並使用這個變量$用戶或定義在函數外的任何其他 變量...

你不需要全局這裏。將變量傳遞給你的函數。或者將它傳遞給你的類構造函數並將其存儲在一個屬性中。然後,您可以在您班級的每種方法中訪問該房產

0

嗯,全局都通過$GLOBALS['var_name']訪問,所以你可以使用$GLOBALS['user']->login但你很快就會喜歡聲明global $user

然後,您將$ user添加爲您的函數的參數。