2010-05-14 106 views
0

這裏的情況是 我創建一個類的實例有沒有一種方法可以定義一個全局變量,它可以從類方法訪問?

$newobj = new classname1; 

那麼下面我有另一個類writtern,我想這個類來訪問上述

class newclass { 
    public function test() { 
     echo $newobj->display(); 
    } 
} 

不允許對象,有沒有一種方法通過一個類來定義全局變量?

+3

聽起來不是一個好主意我 – 2010-05-14 07:21:22

+0

它並不總是一個壞主意,讓$ newobj是一個數據庫類的實例,那麼它是非常有用的 – Harmen 2010-05-14 07:26:59

+0

在我的情況下它 – Starx 2010-05-14 07:29:46

回答

1

製作實例全球:

$newobj = new classname1; 

class newclass { 
    public function test() { 
     global $newobj; 
     echo $newobj->display(); 
    } 
} 

因爲我得到了第一線downvote,我刪除它。

+4

不需要第一個全局。全局關鍵字只能在函數中使用 – knittl 2010-05-14 07:23:15

0

可以看看使用singleton pattern。 這基本上是創建自己的實例類和後續調用將訪問這個實例,因此實現什麼,我想你可能是最多......

6

允許的,但你需要使用適當的語法:要麼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模式:

http://en.wikipedia.org/wiki/Singleton_pattern

0

您還可以從classname1繼承你的NewClass和那麼你將能夠調用類'classname1'的方法 這樣的:

 

class newclass extends classname1 { 
    public function test() { 
     echo parent::display(); 
    } 
} 
 
相關問題