Вход • Регистрация

Вопрос по ООП

  • 30 ноября 2016 г. , редакция: 30 ноября 2016 г.
  • Коллеги не поверите. начал кодить на ООП.
    Сталкнулся с проблемой которую на раз-два не нагуглил.
    Код


    class AutoMonster {


    private $db_login = '';
    private $db_pass = '';
    private $db_name = '';

    public $db;
    public $user;
    public $supplier;
    public $import;

    public function __construct() {

    $this->db = new SafeMySQL(array(
    'user' => $this->db_login,
    'pass' => $this->db_pass,
    'db' => $this->db_name,
    'charset' => 'utf8'));

    $this->user = new User($this->db);
    $this->supplier = new Supplier($this->db);
    $this->import = new Import($this->db);
    }

    }




    В конструкторе класса верхнего уровня создаю объект класса по работе с БД. Дальше в конструкторе создаю несколько экземпларов вспомогательных классов. ИЗ этих классов тоже нежно работать с БД. В каждом из этих классов я свой новый экземпляр объекта по работе с БД создавать не хочу. Ничего унмее не придумал как передать объект БД как аргумент при создании других, чтобы изнутри них им пользоваться, но думается мне что что-то я делаю не так и не хватает тупо базовых знаний ))) Есть средства чтобы из "нижних классов" пользоваться методами и свойствами их "верхнего" класса? И вообще как из объекта user например пользоваться свойствами и методами соседнего объекта import например?

    Спасибо :)
    • 30 ноября 2016 г. , редакция: 30 ноября 2016 г.
    • Знаете что такое наследование? Советую изучить.
      Суть в том что если плодите потомков то указывайте у них родителя например если глянуть код диафана то там можно увидеть примерно следующее.
      Код

      class News extends Controller {}
      Спускаемся ниже
      class Controller extends Diafan {}
      ещё
      abstract class Diafan


      то есть есть абстрактный класс Diafan от него происходит Controller а от него News в результате чего объекты класса News по идее могуть иметь описаные в классах родителях члены и методы. Правда есть некоторые заморочки с областью видимости которые тоже необходимо учитывать.
      Ну собственно как-то так.
      И да совершенно верно у каждого объекта будут свои значения членов чтобы они были одинаковые надо их одинаково инициализировать при создании объекта. Поэтому такой метод нерационален. Надо чётко понимать для чего пишется класс и какую роль будут играть объекты. Определить связи и зависимости.
      • 30 ноября 2016 г.
      • При использовании абстрактных классов и интерфейсов ко всем методам мы обращаемся через верхний объект, а мне нравится когда $объект->нижний объект->метод/свойство. Так можно по подклассам все красивее разложить. Или что-то путаю и при наследовании тоже возможны конструкции $абстрактный класс->наследник->метод/свойство ?

Новости

  • 24 апреля, среда
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.