Ответы пользователя по тегу PHP
  • Как организовать возможность какого-либо действия пользователя 5 раз в 3 суток?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ммм.... откуда тут взялся cron.... просто храните даты голосований, заведите отдельную табличку куда сваливайте кто, за кого и когда проголосовал. Далее простая проверка.
    Ответ написан
    Комментировать
  • Как правильно описать спецификацию (phpspec)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Весь смак PhpSpec проявляется как раз в таких случаях. Вам трудно мокать? Трудно писать тесты? Значит что-то с вашим кодом пошло не так (PhpSpec очень сильно ограничивает в том как и что можно тестить).

    1) зачем вы инджектите контейнер целиком? Инджектите - тогда мокайте его и в методе get возвращайте мок для диспатчера событий
    2) все что создается внутри метода не мокается. То есть коль уж вы делаете new в методе, значит так надо. Вы тут ничего не сделаете. А так как у нас есть мок ивент диспатчера - можно проверить что именно вы туда передаете.
    Ответ написан
  • PHP, python, ruby. Выполняют одинаковые функции или нет?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Имеет ли смысл осваивать php, или лучше сразу питон/руби?


    Если вы сразу знаете что после PHP уйдете в Python/Ruby - то лучше сразу Python/Ruby. C PHP проще уходить в Java/C#.

    а вообще очень неплохо было бы выучить два варианта из вашего списка. Или хотя бы попробовать хотя бы два (а лучше все три). Так как Python и Ruby в чем то похожи (Ruby был создан под влиянием perl и python) а учить python как-то приятнее, то рекомендую попробовать именно PHP и Python. А там уже думать.

    Мое субъективное мнение о местах каждого из этих языков:
    - Ruby - быстрая разработка, прототипирование, проекты с простой бизнес логикой
    - Python - скрипты автоматизации, ресерчи, наукоемкие вычисления и все такое (ооочень большой выбор качественных библиотек на эту тему).
    - PHP - тут есть два мира, один - wordpress и все подобное, другой - WEB приложения. скоро выходит PHP7 с тайпхинтингом для скаляров, хотят впихнуть структуры, словом PHP идет в сторону C# скорее. А так как объектная модель похожа на Java/C# то вся литература для этих языков (а ее оочень много хорошей) для PHP так же справедлива что проще в плане обучения. То есть из трех вариантов для чего-то сложного я бы выбрал именно PHP. А для чего-то попроще и под web - скорее уж Ruby.
    Ответ написан
    Комментировать
  • Как часто стоит прибегать к фреймворкам?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    а когда лучше написать все самому

    никогда. Всегда нужно использовать готовые решения, если они позволяют вам сэкономить время. Писать полностью свои решения нужно только тогда, когда вы объективно видите проблемы с существующими (а это без опыта трудно определить).
    Ответ написан
    3 комментария
  • Как сделать переход по страницам на сайте?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Одна точка входа покорит их,
    Одна соберёт их,
    Одна их притянет
    И в чёрную цепь скуёт их,

    А если более просто - берете один файлик (index.php) и подключаете маршрутизатор какой (например fast route)
    Ответ написан
    Комментировать
  • Какое правильное устройство CMS c архитектурой MVC на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    правильно - HMVC хотя бы. А лучше вообще думать в сторону чего-то поинтереснее.

    Ну и да, норм фронт контроллер (PSR-7 совместимый или symfony/httpkernel совместимый), нормальная библиотека для маршрутизации (fastroute подойдет но я хз как там с расширяемостью, я бы предложил symfony/routing как наиболее гибкую). Ну и расширение функциональности при помощи декораторов/адаптеров/композиции классов. Все на интерфейсах и минимум наследования, делать все системные классы final.

    Вот.
    Ответ написан
    Комментировать
  • Как проанализировать код PHP, по каким критериям?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А в чем смысл подобного сравнения? И да, выбранные вами параметры весьма условны. Время написания уж точно выкиньте, это только ваша скорость и она не дает объективной оценки. Количество кода - так же весьма условная штука. наличие паттернов - они так и так будут, просто реализованы чуть подругому. Это так же не показатель.

    Показателями могут быть, соблюдается ли принцип подстановки барбары лискоу при написании модулей. принцип единой ответственности, принцип инверсии зависимости и т.д. Короче пройтись по SOLID. И стоит думать именно в том контексте, позволяют ли выбранные инструменты писать вам код так, что бы соблюдались эти принципы.

    Есть довольно распространенные практики по сбору метрик кода, оценивающих сложность и качество архитектуры, но они оценивают именно ваш код и плохо будут показывать насколько все плохо. Из инструментов по сбору этих метрик могу выделить только scrutinizer-ci.
    Ответ написан
  • На PHP и Python возможно реализовать одинаковые по функционалу сайты, или какой-то язык мощнее другого?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Клон youtube только на php или python будет проблематично сделать. Как минимум у вас появятся СУБД, очереди, кеши и все такое. В целом же это все вполне себе реально сделать хоть на javascript.
    Ответ написан
    2 комментария
  • Сильные стороны PHP-вских фреймворков по сравнению с фреймворками Python и наоборот? Бывают ли случаи, в которых без фреймворков нереально обойтись?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В данный момент нахожусь на "развилке" будущей жизни и мне бы хотелось узнать, что лучше изучать


    Как на счет оба? Тогда и будет с чем сравнить и соответственно принять какое-то решение. Ну и да, изучение двух языков, причем имеющих концептуальные отличия, пойдет вам на пользу в любом случае.

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

    Если вам так уж хочется выбрать - подкиньте монетку, толку будет явно столько же если не больше.
    Ответ написан
    6 комментариев
  • PHP-MVC: Как осуществить взаимодействие JS и БД?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала, MVC чисто UI-ая архитектура. Об этом как-то скучно, но если интересно почитайте про action-domain-responder

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

    Классический случай клиент-серверной архитектуры - single page application. С точки зрения WEB же частенько у нас клиента как такового почти и нет, почти всю роль клиента забирает браузер а на JS написаны разного рода украшательства и свистоперделки. Короче клиент и сервер сильно перемешаны (то есть сервер слишком много знает о клиенте).

    На клиенте MVC позволяет из view работать с моделью через контроллер, который является эдаким промежуточным слоем, который разделяет view и model между собой. На сервере же, такой подход не жизнеспособен в большинстве случаев. Там поток данных идет строго вниз, запрос -> контроллер -> получение данных в контроллере (из сервисов или еще как) -> формирование представления данных (шаблонизация, сериализация, что угодно) -> отправка ответа. То есть из view возвращаться обратно в контроллер уже не хорошо, у него уже должно быть все что ему нужно, а всякие хелперы и утилиты - часть presentation layer. Иногда это неудобно и спасает HMVC, когда из view layer мы можем инициализировать запрос на другой контроллер, и тогда мы как бы не нарушаем цепочку и вроде как удобно.

    Теперь к сути проблемы, а именно AJAX запрос. Запрос производится клиентом (как бы он небыл связан с сервером), то есть это никакого отношения к архитектуре сервера не имеет. То есть инициализируется все та же цепочка действий, формирование требуемого представления данных и отправка их на клиент. По сути как только мы отдали респонс с сервера, будь там что угодно, все что происходит с ним после, на клиенте, нас уже не сильно волнует.
    Ответ написан
    Комментировать
  • Стоит ли использовать json?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Стоит ли использовать json?

    Почему нет? Можно конечно еще protobuf использовать...

    насколько я понимаю там нету потдержки кук

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

    В целом же популярная практика - JWT (JSON Web Tokens)
    Ответ написан
    5 комментариев
  • А как бы вы сформировали многомерный массив из запроса к бд?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    простенький SQL с джойнами, и простенький PHP код который формирует нужную структуру.
    Ответ написан
  • Действительно ли в PHP PDO Prepared statements не поддерживаются для операций INSERT/UPDATE?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    речь именно о массивах.
    $ids = [1, 2, 3, 4];
    $sql = 'SELECT * FROM table WHERE id IN (?)'; // нельзя
    $sql = 'SELECT * FROM table WHERE id IN (?, ?, ?, ?)'; // можно
    Ответ написан
    4 комментария
  • Считается ли правильным тоном создавать тестовые объекты если нет возможности создать моки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы можете замокать __get метод и таким образом затрэкать обращение к свойству и вернуть необходимое значение. Но в целом публичные свойства для объектов типа ConnectionInterface это уже странно.
    Ответ написан
  • Это говнокод? Если да, то в чем именно я провинился?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да, это говнокод. А чем провинились я устану перечислять

    - $GLOBALS и использоваие суперглобальных массивов
    - использование собачки для подавления ошибок
    - for($count=0;isset($block[$count]);$count++) и стремные бесконечные циклы вместо foreach
    - переменные вида $ppfile и $pppfile, ваш код очень "удобно" читать.
    - смешивание php и html и css
    - по сути код состоит преимущественно из канкатенации строк... это грустно
    - использование закрывающего тега ?>
    Ответ написан
    8 комментариев
  • Как не затереть данные при сохранении Doctrine?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    cloud_zurbag: когда вы вытягиваете данные из entityManager эти самые данные (сущности) начинают крутиться в Unit-of-work. Когда вы дергаете flush этот самый UoW (по умолчанию, поведение настраивается) сравнивает что было, что стало, генерирует SQL соответствующий и коммитит транзакцию (то есть все изменения уже обернуты в транзакцию, непонятно почему в описании вопроса еще раз в ручную оборачивается все). Потому очень даже легко, если случано поменять сущность где-то не в том месте, похерить данные (разве что СУБД вам транзакцию не даст закончить).

    romteh

    Самый простой способ устраить возможные факапы - убрать автоматическое добавление загруженный энтитей в UoW, что вынудит разработчика всегда делать persist (да, по умолчанию можно просто сделать flush при редактировании уже загруженной энтити).

    Еще вариант - флашить только то, что поменялось:

    $em->flush([$entity1, $entity2]);

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

    Но вообще у меня к вам встречный вопрос, что статистика у вас делает в сущностях? Ей там не место (если конечно это не часть бизнес логики именно).
    Ответ написан
  • PHP + MySQL, лучшая книга/лучший ресурс для изучения?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net и гугл, книжки это клево но лучше почитать Танембаума, Кнута и других персонажей. Далее, когда будет уже более конкретные вопросы - будете искать на них ответы (причем самостоятельно). Паралельно можно читать книжки по каким-то определенным сферам.

    Проблема с книжками по PHP в том, что большая часть из них вреда наносят больше чем приносят пользы.
    Ответ написан
    Комментировать
  • Относятся ли методы не связанные с запросами к бд с моделью?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вообще есть разные трактовки того что такое модель. В большинстве из них модель - это совокупность различных элементов, сущности, сервисы, интерфейсы (например если используете шаблон Repository, то в рамках модели определяется интерфейс репозитория, а реализация уже будет относиться к инфраструктурному слою) и т.д.

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

    Рекомендую к прочтению: blog.8thlight.com/uncle-bob/2012/08/13/the-clean-a...
    Ответ написан
    5 комментариев
  • PHP socket_bind() - Address already in use?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Когда приложение умирает, сокет система не высвобождает сразу (по умолчанию), он переходит в TAIM_AWAIT.

    Если вы хотите явно указать, что сразу после закрытия сокета его можно сразу открыть, нужно указывать опцию SO_REUSEADDR
    Ответ написан
    1 комментарий
  • Стоит ли изучать и использовать haxe вместо js и php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нет
    Ответ написан
    Комментировать