• Нормален ли такой подход в организации моделей данных?

    По большому счету, у вас два вопроса:
    Можно ли хранить несколько классов в одном файле?
    Namespaces and classes MUST follow an "autoloading" PSR: [PSR-0, PSR-4].
    This means each class is in a file by itself, and is in a namespace of at least one level: a top-level vendor name.
    PSR-1
    Проблемы такой подход может вызвать только если вы начнете работать в команде, в которой принят какой-то другой стандарт. При наличии современных IDE нет никакой разницы в каком файле лежит класс и поэтому нет никаких причин не писать каждый класс в отдельный файл - так их будет проще читать и искать.

    Можно ли вызывать один класс через другой
    $userLinks = User::getUserLinksObj()->findLinks($userId);
    Если уж вы инкапсулируете, так инкапсулируйте так, чтобы было удобно пользоваться:
    $userLinks = User::findLinks($userId);

    Но в таком случае почему бы не написать сразу нормально?
    $userLinks = UserLinks::findForUser($userId);
    Зачем такая сильная связь между классами? У каждого класса - своя зона ответственности.
    Ответ написан
    Комментировать
  • MVC php на пальцах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ох...

    Model View Controller. Да ну его, ему уже 45 лет (придумали в 79-ом году). Давайте лучше про Model View Adapter погокорим. это то что все используют в популярных фреймворках последние лет так 10 так точно.

    mvc-mvp-mvvm-6-638.jpg?cb=1375170002

    Вообще в этом всем важно не только то, что каждая буква обозначает, а как они друг с дружкой связаны.

    View - это не только HTML, но и вообще представление в целом, а так же логика его формирования. Шаблонизаторы, фильтры, различные функции/объекты помогаютщие нам сформировать view (например форматирование дат, сериализаторы и т.д.) В подавляющем большинстве случаев "представление" наших данных - это HTTP запросы и HTTP ответы. HTML - э то лишь часть HTTP ответа.

    Model - Это целый слой, который может быть представлен в виде кучи отдельных объектиков, структур и т.д. Его задача - делать дела и хранить/менять состояние системы. Тут легко запутаться потому что термин "модель" много чего значит. Воспринимайте его как "слой логики" а не конкретные объекты. И да - база данных и прочая чушь - это детали реализации этого слоя. "не важные штуки" словом. Туда же и ActiveRecord, ORM-ки всякие. Это деталь реализации и все остальные чуваки (view и controller) о них знать ничего не должны (хотя иногда могут в целях упрощения).

    Controller или адаптер. Это опять же не обязательно один объект. это может быть цепочка адаптеров (еще называют фронт-контроллером, middlewares и т.д.). Его задача весьма простая. Получаем представление данных на входе (HTTP запрос), определяем что надо делать, и просим модель что-то сделать (ни в коем случае не меняем ничего самостоятельно в контроллере, он только просит). Потом мы можем попросить модель вернуть нужный нам кусок состояния, и попросить View сформировать представление (HTTP ответ).

    Как-то так. В целом же это я сейчас описал "идеальный мир". Вся суть этого подхода - разделение логики презентационной и логики приложения. Зачем это надо? что бы было проще жить! Обычно UI приложения или способы взаимодействия с ним меняются почаще логики или как минимум в разные моменты времени. Адаптеры в этом случае служат промежуточным слоем, они ничего сами не делают, это "переводчики". Они просто переводят то, что сказано в запросе в язык понятный приложению и обратно.

    Но на начальной стадии можно слегка нарушать эти правила, делать толстые контроллеры и т.д. В этом случае бизнес логика будет потихоньку "вытекать" из модели. Это не хорошо, и на хоть сколько нибудь больших проектах может привести к проблемам. Потому важно находить баланс.
    Ответ написан
    Комментировать
  • Есть ли русскоязычные ресурсы для изучения PHP 7?

    AlexanderShapoval
    @AlexanderShapoval
    PHP maker
    Исключительно PHP7? PHP7 не особо отличается от PHP5.6 для 95% задач. По поводу ресурса - не встречал. Релиз весьма удачный. На Хабрахабр достаточно статей описывающих преимущество 7й версии.

    Лично я провел простой тест с 100 000 000 пустых циклов for, результат такой:
    --PHP 5.2: 5.30796 секунд
    --PHP 5.3: 6.42107 секунд
    --PHP 5.4: 3.05346 секунд
    --PHP 5.5: 3.21097 секунд
    --PHP 5.6: 3.31220 секунд
    --PHP 7.0: 1.59607 секунд

    Также скорость зависит от количества подключенных библиотек. Так подключение xdebug увеличивает требуемое время выполнения в несколько раз (обычно в 2-3 раза).
    Ответ написан
    Комментировать
  • ООП в высоконагруженных проектах считается устаревшим?

    allard
    @allard
    Серийный программист
    Когда-то видел хорошее сравнение по вопросу ооп против процедурного программирования.
    Было что-то на подобие:
    Зачем в наше время мыть посуду руками, если у вас рядом стоит посудомоечная машина. Если тебе нужно помыть одну тарелку, то можно это сделать и руками, а если после банкета у тебя гора посуды, то зачем мучаться...
    Так и с процедурным программированием, если вам нужно добавить какую-то мелочь в проект, с которым вы не знакомы, то почему бы и не написать одну функцию и не вставить её вызов куда нужно, это будет нормальным вариантом. Но если вы хотите разработать гигантский проект для работы с большими объемами разных данных, то тут без ооп никак.

    Думаю мысль понятна. Просто писать что-то серьезное на функциях, вы утоните в своем коде, новые разработчики будут тратить кучу времени понимание структуры проекта. Тем более, придется писать кучу велосипедов, которые уже реализованы в ооп вариантах и успешно используются сотнями тысяч программистов...

    Да, процедурный подход выигрывает в производительности на пару процентов у ооп, ну может на пяток процентов в некоторых проектах. Просто, тяжело сравнить производительность, т.к. ни один серьездный проект не разрабатывается на стандартном php в процедурном стиле (вы представьте yii или laravel на функциях). Ну, не считая отдельных специфичных движков, типа kphp.
    Лишаться кучи преимуществ ооп, ради пары процентов процессорного времени, вообще нет смысла.
    Тем более в наше время куча облачных сервисов, любой проект можно смаштабировать...

    Я бы сказал так, не нужно возвращаться в лихие двухтысячные, нужно стремиться вперед. Php развивается и развивается в сторону опп, так зачем отставать от прогресса?!
    Ответ написан
    7 комментариев
  • Как безопасно открыть доступ к MySql для разработчиков?

    difiso
    @difiso
    В параллельной вселенной я космонавт
    мне предстоит предоставить доступ к mysql ещё паре человек, но им я не могу дать необходимые логин/пароль для подключения к mysql через ssh, всё таки это уже и доступ к серверу.

    1. Вы хотите дать доступ, но не можете дать доступ, потому что таким образом вы дадите доступ?
    2. Почему у вас доступ к MySQL и к серверу - это одно и то же? У вас пароли у root centos и root mysql одинаковые?


    По существу. Дайте разрабам отдельный сервер. Если нельзя, то дайте разрабам ограниченную учетку на сервере, чем это плохо? Или разрешите mysql слушать всё, файрволом закройте все, кроме необходимых адресов. Создайте отдельного пользователя для разработчиков, дайте ему необходимые права в базе. У mysql root поставьте доступ только с localhost.
    Ответ написан
    4 комментария
  • Yii2. Как использовать Yii::t?

    язык источника (тот, который вы используете внутри Yii::t) - русский. язык приложения (тот, на котором хотите отображать) - русский. что на что переводить?
    echo \Yii::t('app','City ID');
    Yii понимает это русским языком. Смените sourceLanguage
    Ответ написан
    Комментировать
  • Где заказать выделенный сервер в России в рублях, как альтернативу hetzner?

    opium
    @opium
    Просто люблю качественно работать
    Технодом дочка селектела так что в целом можно пользоваться
    Ответ написан
    1 комментарий