現在,我的班級系統被嵌入到我的核心課程中。所以,我把我的階級作爲階級:設置一個全局而不是每個函數?
$cms->userClass->function();
但是,這意味着,每一個功能我在我的UserClass的,我需要不斷補充:
global $cms;
爲了能夠訪問數據庫類作爲例如:
$cms->db->function();
是否有任何方法可以爲整個類設置全局,而不必在每個函數的開始時定義它?
現在,我的班級系統被嵌入到我的核心課程中。所以,我把我的階級作爲階級:設置一個全局而不是每個函數?
$cms->userClass->function();
但是,這意味着,每一個功能我在我的UserClass的,我需要不斷補充:
global $cms;
爲了能夠訪問數據庫類作爲例如:
$cms->db->function();
是否有任何方法可以爲整個類設置全局,而不必在每個函數的開始時定義它?
除了使用功能無處不在,如果你建立你自己的類,把類中的這些功能,你可以在類中設置一個單一的屬性,並通過這 - $>訪問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
}
}
如果與依賴注入一起使用,這種方法可以非常靈活。 – 2011-03-19 13:58:11
我會在這裏做一個調整......除非$ cms *必須*成爲公衆,我會繼續前進並將其翻轉爲受保護狀態,然後讓getter返回它。那麼$ cms的上下文在執行過程中不太可能偶然改變。 – CaseySoftware 2011-03-19 14:07:17
+1 @Webnet和@CaseySoftware。 – lonesomeday 2011-03-19 14:17:13
我不認爲有一個班的全球性。
然而,幾個選擇:
有一類全球$ 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"];
}
[Globals is evil](http://stackoverflow.com/questions/5166087/php-global-in-functions/5166527#5166527) – Gordon 2011-03-19 14:16:24
相關: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