За последние 24 часа нас посетили 16470 программистов и 1727 роботов. Сейчас ищут 789 программистов ...

Общий метод записи, чтения, удаления в/из БД

Тема в разделе "PHP для новичков", создана пользователем Konstant1n, 30 янв 2019.

  1. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    PHP:
    1. <?php
    2.  
    3. abstract class Model //базовый класс для моделей (разделов, категорий, заметок, страниц)
    4. {
    5.     ...
    6.     abstract public function getTable(): string;
    7.     abstract public function getId(): int;
    8.  
    9.     public function writeToDB()
    10.     {
    11.         $db = new DB($this->getTable())
    12.         $db->write($this->getId());
    13.     }
    14. }
    15.  
    16. abstract class File //базовый класс для файлов
    17. {
    18.     ...
    19.     abstract public function getTable(): string;
    20.     abstract public function getId(): int;
    21.  
    22.     public function writeToDB()
    23.     {
    24.         $db = new DB($this->getTable())
    25.         $db->write($this->getId());
    26.     }
    27. }
    28.  
    29. ?>
    можно ли куда-нибудь вынести общий метод writeToDB() классов Model и File?
    как это в фреймворках делается?
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.596
    Симпатии:
    1.764
    А ты будешь прямо весь файл пихать в бедную БД? Вообще, трейты (trait) для таких штук придуманы как раз.
     
  3. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    нет конечно, ты что.... информацию о файле надо записать в БД
    --- Добавлено ---
    Можно конечно в трейт вынести, но это же не совсем хорошо?
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.596
    Симпатии:
    1.764
    @Konstant1n, просто такая запись о файле вполне укладывается в концепцию модели, которую ты избрал, в таком случае. В чём существенное отличие будет? Ты, я так понимаю, творить пытаешься Active Record?
    --- Добавлено ---
    Некоторые считают, что не хорошо. С другой стороны, самый популярный на данный момент фреймворк Laravel - это трейт в трейте и трейтом погоняет.
     
  5. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Мо
    пишу собственный php mvc сайт. изучаю для понимания. дальше планы в yii2.0. Отличие в том, что в File будет загрузка, удаление, переименование файла. А в Model этого не будет. Сейчас вот открыл два этих класса и сравниваю. Вижу, что в File есть get, save, delete, и то же самое есть в Model, при этом в Model больше ничего нет, а в File + еще загрузка, удаление файла.

    а как тогда сделать так, чтобы подключение трейта в класс было обязательным, чтобы не забыть как-нибудь
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.596
    Симпатии:
    1.764
    Ну так унаследуй от Model и добавь новые методы. Наследование в том числе и для этого придумано.
     
  7. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    придётся так. в трейт не получится - есть static свойства
    --- Добавлено ---
    Тогда будет множественное наследование - File extends Model, FileImage extends File. так норм будет?
     
  8. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Тогда будет множественное наследование - File extends Model
    ошибся, можно и трейт. так и сделаю, чё я голову морочу + интерфейсы кину
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.596
    Симпатии:
    1.764
    Где? Какое множественное? Файл наследуется от модели, никакого множественного нету. Его в принципе нету в PHP. Множественное - это если бы можно было написать
    PHP:
    1. class File extends Model, NamedObject, HrenZnaetChto {}
    Но в PHP вместо множественного наследования интерфейсы и трейты
     
    Konstant1n нравится это.