2011-01-22 68 views
6

如何將全局變量傳遞給我想使用的類,而無需在類的每個方法中將其聲明爲GLOBAL?如何將全局變量傳遞給PHP中的類?

例如:

$admin = "admin_area"; 

if($_POST['login']){ 
     $user = new Administrator; 
     $user->auth($pass,$username); 
    } 
班上管理員我想要的變量$管理員可以在類的所有方法訪問,無需這樣做

class Administrator{ 

    public function auth($pass,$user){ 

    global $admin; 
    ..... 

    } 
    public function logout(){ 
    global $admin; 

    ..... 
} 

} 
+0

將它存儲在會話中 – 2011-01-22 13:55:33

+0

[PHP類:全局變量作爲類中的屬性]的可能重複(http://stackoverflow.com/questions/4489134/php-class-global-variable-as-property-in-class ) – Gordon 2011-01-22 14:45:56

回答

9

好了,你可以聲明一個成員變量,並將其傳遞給構造函數:

class Administrator { 
    protected $admin = ''; 

    public function __construct($admin) { 
     $this->admin = $admin; 
    } 

    public function logout() { 
     $this->admin; //That's how you access it 
    } 
} 

然後通過實例化:

$adminObject = new Administrator($admin); 

但我建議儘量避免全局變量。他們會讓你的代碼更難以閱讀和調試。通過做類似上面的事情(將它傳遞給類的構造函數),可以大大改善它...

1

將它們複製到構造函數中的對象變量中。

global $user; 
$this->user = $user; 

這不是太優雅,反正使用全局圖並不是太優雅。

2

一般來說,PHP提供$GLOBAL陣列,它可以被用來訪問超全局變量。順便說一句,使用這個數組並不比在所有方法開始時使用「global」語句好得多。另外,使用這種方法似乎不適合面向對象的代碼。

所以,你可以:

  • 要麼通過這些變量作爲構造函數的參數(請參閱從ircmaxell對細節的答案)

  • ,或者使用一些配置類(單)

決定取決於您的全局參數的語義。