• Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

    Начнем с того, что вы неверно наследуете классы. Почему у вас класс, отвечающий за подключение к базе данных является родителем класса, работающим с заказами? Наследование применяется, если можно сказать, что что-то является чем-то. Например, разработчик является работником; компьютер является устройством и тд. Здесь же у вас вообще близко такой логике не получится следовать. Вы должны передавать хотя бы объект для работы с бд через инъекцию, например, в конструктор. В идеале, нужно использовать паттерн репозиторий для работы с базой данных.

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

    Вы вызываете connect() в методах. То есть, каждый вызов этого метода будет приводить к установке нового соединения с базой данных, даже если оно уже было установлено. Соединение с базой данных это достаточно дорогостоящая операция.

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

    Ошибки не нужно выводить в этом классе. Вы должны поймать исключение базы данных, преобразовать ее в исключение предметной области и пробросить его дальше и где-то там, на уровне выше вывести информацию пользователю об ошибке. В mvc системе, например, это делается в контроллере.

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

    Вам пока рано писать такие велосипеды. Судя по всему, у вас нет опыта вообще. Посмотрите готовые решения: фреймворки, ORM, изучите их, хотя бы поверхностно разберитесь, как оно работает и уже потом пробуйте что-то сделать, исходя из полученных знаний.

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Насколько у меня правильный код ООП php?

    customtema
    @customtema
    arint.ru
    $props = array(
         'orderID' => 'int',
         'orderID' => 'string',
         'value' => 'string',
    );
    
    foreach ($props as $value => $type)
    {
         $this->$value = ($type) strip_tags($value);
    }


    ;)

    А если серьезно - просто подсмотрите, как у других сделано.
    Ответ написан
    Комментировать
  • Насколько у меня правильный код ООП php?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    вообще не правильный, не должно быть наследования, инъекция зависимости должна быть
    Ответ написан
    Комментировать
  • Насколько у меня правильный код ООП php?

    GM_pAnda
    @GM_pAnda
    Бездельник
    Почитайте документацию про PSR-4, станет потом более понятно про все именования и тд
    Ответ написан
    1 комментарий
  • Онлайн блокнот для заметок?

    Afres
    @Afres
    Product Owner
    Может кому еще актуален ответ на данный вопрос, как и мне.
    У гугла новый хороший сервис https://keep.google.com/
    Есть так же приложение под андроид.
    Ответ написан
    Комментировать
  • Как сделать разлет картинок из центра по краям после задержки?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    Если вы хорошо владеете javascript, то предлагаю воспользоваться "Зелёным Шоком"
    Этот фреймворк делает различные сложные анимации, может пригодится во многих интересных и сложных проектах, на ютубе есть много видео о нём, хоть и на английском, но у них полно примеров на codepen, так что - Welcome )))

    https://greensock.com
    Ответ написан
    3 комментария
  • Как осуществить такую анимацию?

    Eridani
    @Eridani
    Мимо проходил
    Particle JS
    Ответ написан
    Комментировать
  • Как осуществить такую анимацию?

    Finesse
    @Finesse
    Через <canvas>. Программирование производится с помощью JavaScript. Схема примерно такая:
    1. На то место, где должен быть эффект, помещается canvas, который занимает всю площадь места.
    2. В памяти генерируется набор случайных точек со своим вектором скорости.
    3. В каждом кадре анимации точки сдвигаются в соответствии в вектором скорости.
    4. В каждом кадре анимации точки отрисовываются на canvas. Дополнительно проводятся линии между всеми парами точек, между которыми расстояние меньше определённого значения.

    Есть готовая библиотека для создания таких анимаций.
    Ответ написан
    Комментировать
  • Какой шаблонизатор для PHP выбрать?

    zooks
    @zooks
    Frontend
    Подтверждаю, Twig хорош. Если вы используете Laravel, но лень прикручивать Twig, тогда Blade.
    Ответ написан
    Комментировать
  • Какой шаблонизатор для PHP выбрать?

    DevMan
    @DevMan
    Где можно выиграть по скорости (и нужно ли)?
    по скорости быстрее будет чистый пых.
    только быстрее он будет совсем незначительно: чтоб шаблонизатор стал узким горлышком надо очень сильно постараться набыдлить.
    иными словами - аспект скорости можно вообще не рассматривать.

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

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

    ну и если из шаблона можно дропнуть базу - это что угодно, только не шаблон. это к вопросу "нужен ли шаблонизатор".
    Ответ написан
    4 комментария
  • Какой шаблонизатор для PHP выбрать?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    TWIG ( https://twig.symfony.com/ ) - хороший шаблонизатор. Использовал его когда-то при разработке своего фреймворка на PHP
    Ответ написан
    6 комментариев
  • Кто писал свою CMS?

    Epsiloncool
    @Epsiloncool
    Программер, веб-девелопер, гейм-девелопер
    Да, писал на базе PHP. Основной идеей была модульность и автоматическое отслеживание изменений.

    1) Какой системой вдохновлялись или брали за образец?

    Никакой, считал все остальные CMS "недосистемами", недостойными подражания.

    2) Писали ли к ней инсталятор или предполагался другой способ установки?

    Нет, предполагалось, что это PHP скрипт, который начинает работать сразу после установки.

    3) Какой использовали визуальный редактор для админки? Один из 2 известных, что-то другое, или свой?

    Сперва хотел написать свой собственный, потом понял, что не напишу конкурентноспособный до конца своей жизни и использовал TinyMCE.

    4) Была ли у неё какая-то специализация - магазины, визитки, лендинги, что-то ещё?

    Нет, модульность подразумевала полную универсальность.

    5) Разделяли ли ядро и дополнительные модули?

    Да, ядро было небольшим, весь функционал был (предполагался) в модулях.

    6) Предусматривалась ли какая-то система шаблонов? (юзали ли шаблонизатор или на php)?

    Да, в качестве шаблонизатора для страниц можно было использовать plain-php или smarty-шаблонизацию.

    - Ну и если есть ссылки на репозитории кидайте кому не стыдно показать если в открытом доступе у вас.

    Нет таких ссылок. На самом деле довольно большой продукт - моя собственная CMS (который я делал 4 года) был банально смыт в унитаз, а 8 сайтов, сделанные на его базе были переделаны под другую популярную CMS и ничего от этого не потеряли, а даже приобрели.

    Постфактум выяснилось, что желание разработать "свою собственную CMS" было вызвано нежеланием разбираться с уже существующими популярнейшими CMS общего назначения, а также ощущение себя "пупом земли", умнее, чем сотни и тысячи других людей.

    Нужно было просто посмотреть существующие CMS и использовать одну из них. Жаль потерянных лет.
    Ответ написан
    Комментировать
  • С чего начать при изучении symfony с нуля?

    Я начал с перевода статей можете почитать, если интересно. У Symfony хорошая документация, если какая-то специфическая задача то в гугле можно найти ответы на практически все вопросы + куча видео в youtube и конечно надо учить Doctrine ещё. Различия между 2 и 3 версией незначительны, обращайте внимание на совместимость бандлов с вашей версией Symfony. Удачи
    Ответ написан
    1 комментарий
  • С чего начать при изучении symfony с нуля?

    @pashalim
    Не так давно наткнулся на официальное демо приложение Symfony: symfony.com/blog/symfony-demo-1-0-0-released Интересно было посмотреть на практики самих разработчиков.
    Ответ написан
    1 комментарий
  • С чего начать при изучении symfony с нуля?

    alex_dm
    @alex_dm
    Лучше всего начинать здесь:
    https://knpuniversity.com/tracks/symfony
    первый курс бесплатный, если понравится, доступ к остальным 24$/месяц.
    Ответ написан
    Комментировать
  • С чего начать при изучении symfony с нуля?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Если с ООП на ты, то проблем возникнуть не должно.
    Для начала вам требуется понять саму архитектуру симфони.
    Далее уже переходить к пакетам которые в нее входят.
    В частности Symfony\Component\HttpFoundation, Doctrine, Yml, Twig
    Сервисы, что это и с чем едят.
    Создание кастомных реквестов для api.

    80% информации имеется в документации, остальное в гугл.
    Благо в поисковике множество информации на любые темы относительно симфони.

    Я бы еще определился, как вы собираетесь делать проект.
    SPA/Rest API или все в кучу по классической схеме симфони (контроллер->метод->сервис->ответ->твиг).
    Ответ написан
    Комментировать
  • Как правильно работать с объектами выборки doctrine в Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    дополню ответ Юрий

    Во первых, это на столько здоровый объект реляции images, что отдебажить его можно только с помощью функции dump.


    Все сущности заворачиваются в прокси объекты, что бы работала "магия" вроде ленивой подгрузки и т.д. Именно по этому в сущностях "больше" чем есть на самом деле.

    По поводу коллекций, в Doctrine есть такая штука как Collection. Вы должны понимать что в доктрине вы оперируете не табличками в базе, а объектами. Строите именно объектную модель вашей системы. В этом ключе можете почитать что такое "агрегат сущностей". В вашем случае у вас агрегат будет состоять из двух сущностей. Product и его Image. Например если вы захотите сделать добавление картинок, вы можете сделать так:

    /**
     * usage: $product->addImage($image);
     */
    public function addImage(Image $image)
    {
        $this->images->add($image);
    }


    А коллекция сама выполнит persist новой сущности. Таким образом количество репозиториев уменьшается до количества корней агрегатов сущностей. В вашем примере "корнем", то есть вершиной графа взаимоотношений объектов в контексте продуктов, является сам продукт. А потому репозиторий мы будем делать только для продуктов. Все остальное внутри оного разруливается либо при помощи коллекций.

    При работе с доктриной вообще полезно представлять себе, что никакой базы данных у вас нет. Что данные просто живут между запросами где-то там, в памяти. Это должно помочь вам "абстрагироваться" и перестать смешивать "сущности" и "таблицы".

    К примеру "новички" в доктрине любят персисть сущность даже для обновления. Они путают `persist` и `save`. Так вот, если вы загрузили сущность из базы через доктрину, то сущность уже попадает в unit of work. И делать persist уже не нужно, этот метод только для того чтобы доктрина узнала о чем-то новом. А так она и так знает про эту сущность. В итоге вы можете просто что-то поменять и вызвать flush. То есть репозиторий - это тупо хранилище. Хранилище умеет хранить. Изменять то, что оно хранит оно не может.

    Так же рекомендую на тему репозиториев почитать это:

    www.whitewashing.de/2013/03/04/doctrine_repositori...

    Ну и в целом.

    https://www.youtube.com/watch?v=rzGeNYC3oz0 - доклад о том как готовить доктрину от авторов оной.

    От себя лишь добавлю простые правила:

    - Не используйте напрямую доктриновские репозитории. Пишите свои, а в них уже юзайте доктриновские. Не стоит размазывать доктрину по всему проекту, потом это будет нереально поддерживать.
    - Не наследуйтесь от EntityRepository. Это внутренний механизм доктрины общего назначения. Используйте их в своих репозиториях со своим интерфейсом, повышая специфичность и ужесточая контроль за тем кто что юзает.
    - Старайтесь использовать entity manager только в своих репозиториях и каких то небольших сервисах. Не размазывайте все по всюду.

    что очень сильно срет память.


    Доктрина гарантирует вам что в памяти будет всегда только один инстанс сущности. То есть если у вас есть 10 объектов одного типа и имеющих один объект, это все будут ссылки на одну сущность. В вашем случае у вас просто циклическая ссылка между продуктами и изображениями. dump циклические ссылки не особо умеет.

    Это логичное ограничение, дабы не возникало ситуаций что вы обновили что-то в одном экземпляре сущности и что-то в другом, и в базу попадут только часть изменений. За подробностями - читайте документацию к доктрине в отношении UnitOrWork и Identity Map.
    Ответ написан
  • Symfony, что такого сделать джуниору?

    GTRxShock
    @GTRxShock
    Full-stack developer (Symfony, Angular)
    https://habrahabr.ru/post/301760/

    потом можно запилить систему учета обращений, с наглядной статистикой, печатью бланков, можно внедрить разделение ролей менеджер/сотрудник. Потом с наработками идете в ближайшую аутсорс компанию и забываете о возможности задавать вопросы, по причине полной занятости :D
    Ответ написан
    Комментировать
  • Какой функционал необходимо сделать на yii2, чтобы работодателю было понятно, что я с ним знаком?

    @hufawoso
    Все верно, т.к. сегодня yii есть, а завтра его перестанут поддерживать и нужно будет писать на другом фреймворке.
    Поэтому работодатели в первую очередь смотрят знание нативного php, умение находить решения, и общую адекватность человека.
    Ответ написан
    Комментировать
  • Какой функционал необходимо сделать на yii2, чтобы работодателю было понятно, что я с ним знаком?

    @SharuPoNemnogu
    не язык плохой, программисты такие...
    Писать надо не для того, чтобы показать кому то, чтобы заценили, а для того, чтобы познать фреймворк во всех тонкостях. Можно и за пол дня набросать через gii Ваш мега сайт с характеристиками и блэк джеком не вникая во внутренние механизмы и фишки.

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

    Работодатель не будет смотреть весь функционал, что вы там на ваяете, мб обратит внимание на какие то интересные сложные моменты, показывающие Ваш скилл, но врядли. Код просят, чтобы посмотреть стиль оформления и наличие говнокода (лишние/не объявленные переменные например).

    Что написать? В основном это crm.
    Ответ написан
    1 комментарий