2011-03-19 59 views
2

現在,我的班級系統被嵌入到我的核心課程中。所以,我把我的階級作爲階級:設置一個全局而不是每個函數?

$cms->userClass->function(); 

但是,這意味着,每一個功能我在我的UserClass的,我需要不斷補充:

global $cms; 

爲了能夠訪問數據庫類作爲例如:

$cms->db->function(); 

是否有任何方法可以爲整個類設置全局,而不必在每個函數的開始時定義它?

+1

相關:http://stackoverflow.c om/questions/1812472/in-a-php-project-how-do-you-store-access-and-organiz-your-helper-objects – Unicron 2011-03-19 13:49:26

回答

5

除了使用功能無處不在,如果你建立你自己的類,把類中的這些功能,你可以在類中設置一個單一的屬性,並通過這 - $>訪問var一切....

$class = new MyClass($cms); 
echo $class->cms; //doesn't work cause it's private 

class MyClass() { 
    private $cms; //private so it's only accessible within this class 

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

    //all your functions here can use $this->cms 
    function myFunction() { 
     echo $this->cms->func(); //this will work 
    } 
} 
+0

如果與依賴注入一起使用,這種方法可以非常靈活。 – 2011-03-19 13:58:11

+2

我會在這裏做一個調整......除非$ cms *必須*成爲公衆,我會繼續前進並將其翻轉爲受保護狀態,然後讓getter返回它。那麼$ cms的上下文在執行過程中不太可能偶然改變。 – CaseySoftware 2011-03-19 14:07:17

+0

+1 @Webnet和@CaseySoftware。 – lonesomeday 2011-03-19 14:17:13

1

我不認爲有一個班的全球性。

然而,幾個選擇:

  • 有一類全球$ CMS變量的引用,因此:

    private $cmsref; 
    function __construct(){ 
        global $cms; 
        $this->cmsref = &$cms; // $this->cmsref will be a reference to $cms now 
    } 
    
  • 使用超全局$ _GLOBALS:

    function foo(){ 
        // to access $cms: 
        $_GLOBALS["cms"]; 
    } 
    
+0

[Globals is evil](http://stackoverflow.com/questions/5166087/php-global-in-functions/5166527#5166527) – Gordon 2011-03-19 14:16:24

相關問題