這裏的情況是 我創建一個類的實例有沒有一種方法可以定義一個全局變量,它可以從類方法訪問?
$newobj = new classname1;
那麼下面我有另一個類writtern,我想這個類來訪問上述
class newclass {
public function test() {
echo $newobj->display();
}
}
不允許對象,有沒有一種方法通過一個類來定義全局變量?
這裏的情況是 我創建一個類的實例有沒有一種方法可以定義一個全局變量,它可以從類方法訪問?
$newobj = new classname1;
那麼下面我有另一個類writtern,我想這個類來訪問上述
class newclass {
public function test() {
echo $newobj->display();
}
}
不允許對象,有沒有一種方法通過一個類來定義全局變量?
製作實例全球:
$newobj = new classname1;
class newclass {
public function test() {
global $newobj;
echo $newobj->display();
}
}
因爲我得到了第一線downvote,我刪除它。
不需要第一個全局。全局關鍵字只能在函數中使用 – knittl 2010-05-14 07:23:15
可以看看使用singleton pattern。 這基本上是創建自己的實例類和後續調用將訪問這個實例,因此實現什麼,我想你可能是最多......
這是允許的,但你需要使用適當的語法:要麼global
關鍵字或$GLOBALS
超全局:
http://es.php.net/manual/en/language.variables.scope.php
http://es.php.net/manual/en/reserved.variables.globals.php
<?php
class classname1{
private $id;
public function __construct($id){
$this->id = $id;
}
public function display(){
echo "Displaying " . $this->id . "...\n";
}
}
$newobj = new classname1(1);
class newclass {
public function test() {
global $newobj;
echo $newobj->display();
}
public function test_alt() {
echo $GLOBALS['newobj']->display();
}
}
$foo = new newclass;
$foo->test();
$foo->test_alt();
?>
但是,必須謹慎使用全局變量。他們可能會導致難以理解和維護的代碼以及難以追查的錯誤。它通常容易只是傳遞所需的參數:
<?php
class classname1{
private $id;
public function __construct($id){
$this->id = $id;
}
public function display(){
echo "Displaying " . $this->id . "...\n";
}
}
$newobj = new classname1(1);
class newclass {
public function test(classname1 $newobj) {
echo $newobj->display();
}
}
$foo = new newclass;
$foo->test($newobj);
?>
最後但並非最不重要的,你可能會尋找單身OOP模式:
您還可以從classname1繼承你的NewClass和那麼你將能夠調用類'classname1'的方法 這樣的:
class newclass extends classname1 {
public function test() {
echo parent::display();
}
}
聽起來不是一個好主意我 – 2010-05-14 07:21:22
它並不總是一個壞主意,讓$ newobj是一個數據庫類的實例,那麼它是非常有用的 – Harmen 2010-05-14 07:26:59
在我的情況下它 – Starx 2010-05-14 07:29:46