在PHP

2013-07-17 54 views
0
組織和有關類

嗯,我想我的老代碼,適應更多的面向對象的模型,但我覺得在這樣做的困難。我的課程結構如下所示:在PHP

// config.php 
class Config { 
    const Setting1 = 'value'; 
    const Setting2 = 'value'; 
} 

// main.php 
include 'config.php' 

class Main { 
    var $Config; 
    var $Info; 
    var $Db; 

    function _construct() { 
     $this->Config = &new Config; 
     $this->Info = &new Info; 
     $this->Db = &new Db($this); 
    } 
} 

class Info { 
    function getSetting($a, $Config) { 
     if ($a>0) return $Config::Setting1; 
     return $Config::Setting2; 
    } 
} 

class Db { 
    function _construct($Main) { 
     $Setting1 = $Main->Config::Setting1; 
    } 
} 

// index.php 
$Main = new Main; 
echo $Main->Info->getSetting(1, $Main->Config); 

因此,如您所見,此代碼中存在不正確的內容。我想是有Main類中的一切,創建$Main對象,並從那裏訪問任何其他對象。 Db將需要從Config一個常數,但我不想在Db內創建一個新的Config,但使用Main中的一個。信息也是一樣。

+0

這是你無法從主訪問當前的對象? – steven

+0

問題出在這個代碼'$ Setting1 = $ Main-> Config :: Setting1'。我收到了T_PAAMAYIM_NEKDOTAYIM錯誤 – ali

+0

這種設計的目的是什麼?首先,VAR的應該由私人進行更換,保護或公開,其次,你可以寫在主要方法是將通過類似的寫入方法getSetting內對象的工作($ A),將自動傳遞配置到內部構件,它將使主類使用simplier閱讀 – insanebits

回答

0

的問題應該是固定與此:

// config.php 
class Config { 
    public static $Setting1 = 'value'; 
    public static $Setting2 = 'value'; 
} 

// main.php 
include('config.php'); 

class Main { 
    private $Info = null; 
    private $Db = null; 

    public function _construct() { 
     $this->Info = new Info(); 
     $this->Db = new Db(); 
    } 

    public function getSetting($a) { 
     return $this->Info->getSetting($a); 
    } 
} 

class Info { 
    public function getSetting($a) { 
     if ($a>0) return Config::$Setting1; 
     return Config::$Setting2; 
    } 
} 

class Db { 
    public function _construct() { 
     $Setting1 = Config::$Setting1; 
    } 
} 

// index.php 
$Main = new Main(); 
echo $Main->getSetting(1);