За последние 24 часа нас посетили 23005 программистов и 1728 роботов. Сейчас ищут 2098 программистов ...

Как правильно хранить объект внутри объекта?

Тема в разделе "PHP для новичков", создана пользователем Mr._Stas, 12 сен 2017.

  1. Mr._Stas

    Mr._Stas Новичок

    С нами с:
    12 сен 2017
    Сообщения:
    3
    Симпатии:
    0
    Вопрос, возможно, туповатый, но ответ в учебниках не нашёл .
    Имеется класс Table, объект которого содержит несколько protectedполей, являющимися объектами класса Field.
    Конструкция
    class Table {
    protected f1 = new Field();
    }
    не прокатывает.
    Можно создание объектов поместить в конструктор
    <?php
    class Table {
    protected f1, f2;
    function __construct(){
    $this->f1 = new Field();
    $this->f2 = new Field();
    }
    }?>
    Но в этом случае возникает две трудности:
    1. Необходимо дублировать все поля типа Field сначала в начале класса после слова protcted, а затем в конструкторе. При добавлении, изменении полей, постоянно забываешь одно из двух мест. Неудобно.
    2. Если у класса Table есть наследники со своими конструкторами, то нужно принудительно вызывать конструктор родительского класса, да ещё и так чтобы все действия с полями типа Field происходили после вызова этого конструктора. Неудобно.
    Может я что-то делаю не так, поясните, пожалуйста. Может есть более простое решение?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    То, что ты описал, это нормально. Да блин в программах много букв, часто пишут по сути одно и то же. А кому легко?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    с++ легко
    --- Добавлено ---
    там без ооп
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    какая неожиданная мысль.
    --- Добавлено ---
    ты наверное хотел сказать, что в плюсах проще инициировать переменную в месте объявления. а сказал что-то совсем другое.
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. class Table
    4. {
    5.    protected $f1, $f2;
    6.    
    7.    public function __construct( Field $Field1, Field $Field2 )
    8.    {
    9.      $this -> f1 = $Field1;
    10.      $this -> f2 = $Field2;
    11.    }
    12. }
    13.  
    14. new Table ( new Field, new Field );
    по тренду и бла бла бла брехня