2013-07-17 2 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, но я не хочу создавать новые Config внутри Db, но используйте один из Main. То же самое происходит с Info.

+0

, который является объектом, вы не можете получить доступ из основных в настоящее время? – steven

+0

Проблема заключается в этом коде '$ Setting1 = $ Main-> Config :: Setting1'. Я получаю ошибку T_PAAMAYIM_NEKDOTAYIM – ali

+0

Что было бы целью такого дизайна? Во-первых, var следует заменить частным, защищенным или общедоступным. Во-вторых, вы могли бы написать основные методы, которые будут работать с внутренними объектами, такими как метод write getSetting ($ a), который автоматически передает Config на внутренний член, чтобы упростить использование основного класса для чтения – 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^