Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Хабровчане vs. цифровые сервисы банков: итоги
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
skobkin

Алексей Скобкин

Гентушник, разработчик на PHP и Symfony.
  • 330
    вклад
  • 18
    вопросов
  • 578
    ответов
  • 28%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Оправданно ли использование doctrine в хелпер классе symfony 3?

    Fesor
    Сергей Протько @Fesor
    Full-stack developer (Symfony, Angular)
    container-aware - знает про контейнер и может работать с ним, чего по хорошему оно не должно уметь делать.

    Хочу писать написать функцию которая достает записи из бд по id.


    Записи из БД или сущности? Это вопервых весьма большая разница, а во вторых уже же есть старый добрый $em->find(Entity::class, $id), парам конвертеры дефолтные и т.д

    функцию в хелпер классе который будет находиться тут AppBundle\Utils


    Вообще это весьма плохая идея. И про то что будет глобальная функция которая этим будет заниматься, и то что вы ее как статику в класс запихаете а не сервис сделаете, и то что Utils... это называется "мне было лень придумывать адекватное название".
    Ответ написан более трёх лет назад
    3 комментария
    Нравится 2 3 комментария
  • Немного про замыкания в PHP?

    Fesor
    Сергей Протько @Fesor
    Full-stack developer (Symfony, Angular)
    А каковы границы тут ?


    А тут никто никуда не ходит вообще. У вас есть скоуп функции и наружу вы ходить не можете. Вы можете снаружи прокидывать нужные переменные в скоуп вашего замыкания (use ($tax, &$total)). То есть вы просто даете вашему замыканию попользоваться этими переменными.

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

    p.s.
    Но в вашем случае в этом нет ровным счетом никакого смысла. Если вам надо просто сумму посчитать - вам стоит использовать функцию array_reduce, правда тогда придется изменить еще и способ, как вы храните ваши "продукты". А еще вот эта штука:

    $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                        strtoupper($product));


    Попахивает "дурными решениями". Пощадите тех, кто будет работать с вашим кодом через пол года (даже себя самого). Код должен быть не "коротким" а "понятным". Код чаще читают чем пишут. Все должно быть не двусмысленно, выражать что вы хотели сделать и не требовать комментариев (а все что требует комментариев выносится в приватные методы с адекватным названием).
    Ответ написан более трёх лет назад
    5 комментариев
    Нравится 4 5 комментариев
  • Правильно ли я понял философию Docker?

    Fesor
    Сергей Протько @Fesor
    Full-stack developer (Symfony, Angular)
    Контейнеры данных


    Они не нужны, используйте named volumes вместо этого (с версии 1.9 докера).

    Исходный код и локальные npm-модули (или лучше это в предыдущий контейнер, и при старте выполнять


    Нет, npm install надо выполнять ДО сборки образа. Когда контейнер стартует - внутри у него уже все должно быть. Опять же я лично против того, что бы выносить исходники проекта в отдельный контейнер-пустышку. У вас есть контейнер с нодой - исходники для ноды должны быть там. Есть некоторые нюансы связанные со сборкой контейнера но это так.

    На файловой системе хоста


    Ничего.

    Логи прокидываются в stdout/stderr контейнера и собираются на хосте через докер любым подходящим драйвером (читаем документацию).

    Конфигурация - все что в конфигах от окружения к окружению меняется - в ENV переменные. Все остальное - не меняется и потому просто вшито внутрь контейнера.
    Ответ написан более трёх лет назад
    21 комментарий
    Нравится 17 21 комментарий
  • Каким должен быть контрольный список знаний для Junior PHP(2016)?

    Uwe_Boll
    Uwe_Boll @Uwe_Boll
    Я Злой и Страшный Уве Болл в Разработке знаю Толк
    где компилятор?
    7112_20.jpg
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 22 Комментировать
  • Стоит ли открывать ИП при работе в Upwork или остаться физиком?

    Zifix
    Яков Е @Zifix
    Barbatum
    Налоговые каникулы для IT ИП действуют не во всех регионах. Если заниматься серьезно, и выводить серьезные суммы, то можете привлечь внимание соответствующих органов, тем более что незаконное предпринимательство у нас наказуемо. С ИП головной боли не много, уплата налогов головной болью не является, сейчас все автоматизировано сервисами типа Эльбы и Мое Дело.
    Ответ написан более трёх лет назад
    4 комментария
    Нравится 6 4 комментария
  • Doctrine не запускает PrePersist при загрузке фикстур?

    BoShurik
    BoShurik @BoShurik Куратор тега Symfony
    Symfony developer
    Не забыли добавить аннотацию к классу?
    @ORM\HasLifecycleCallbacks()
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 2 Комментировать
  • Не заносятся данные с формы в БД?

    Rsa97
    Rsa97 @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. mysql_query не будет работать в PHP 7.0 и выше.
    2. В INSERT'е попытка записать в два поля семь значений.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 4 Комментировать
  • Как правильно писать названия переменных, функций и тому-подобное?

    Fesor
    Сергей Протько @Fesor
    Full-stack developer (Symfony, Angular)
    нижнее подчеркивание у функции убираем и все уже чуть получше.

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

    // calculate sum
    $sum = calculateSum(); 
    // generate report for premium users
    $sum = generateReport(new PremiumUsersSpecification());


    как-то так. Ну а что как, у меня такие правила:

    - константы - SCREAMING_SNAKE_CASE
    - названия объектов - UpperCamelCase
    - названия переменных, методов, функций и т.д. - lowerCamelCase
    - таблички/поля в бд, json, yml - snake_case
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 6 Комментировать
  • Уровень зарплаты php-программистов?

    OnYourLips
    OnYourLips @OnYourLips
    Зарплата - это последний критерий, о котором я бы думал, уходя в болото битрикса.
    Ответ написан более трёх лет назад
    5 комментариев
    Нравится 16 5 комментариев
  • Как узнать какой именно php скрипт приводит к ошибке или работает медленно?

    copist
    Павел Волынцев @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Если есть возможность, замените Apache на PHP FPM SAPI, прилагающийся к PHP. При этом можно включить PHP slow log. В специальном логе будут появляться стек-трейсы процессов, которые работали больше заданного количества секунд именно в этот самый момент, то есть например, в 30ую секунду от запуска процесса.

    В случае проблем рекомендуется делать slow log на все запросы, которые работают больше 1-2 секунд. Возможно дьявол кроется не в длинных процессах, а в огромном количестве мелких.

    Также к PHP FPM прилагается встроенная система мониторинга. Можно посмотреть, сколько сейчас порождено процессов. Иногда их чрезвычайно много.

    Если заменить Apache на PHP FPM невозможно, то путь исследования более длинный: нужно в настройках Apache настроить CustomLog с замером времени на выполнение. см. ответ на serverfault. Затем исследовать логи (там будут только URL запросов, без стрек-трейсов) и самостоятельно определять, что именно могло вызвать тормоза.

    Можно подключить профилировщики XDebug + Webgrind или XHprof. Замеры можно делать на выборочных запросах, например только для пользователя с определённого IP или при наличии определённой куки. Отчёты будут очень детальные и будут включать замеры по всем внутренним вызовам от начала до завершения процесса, а не только в 30ую секунду, как делает php slow log.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 5 Комментировать
  • Как в Debian увеличить силу тока (наприжения) на USB?

    nonname
    nonname @nonname
    Так силу тока или напряжение? USB по стандарту идут на 5В, а вот ток обычно 0.5А, на USB3.0 сила тока выше. Без паяльника тут мало что сделаешь.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
  • Стоит ли указывать в резюме учебные работы (сайт на Symfony 2)?

    Ronnie_Gardocki
    Nikolay Talanov @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Можно и нужно. У меня вообще все портфолио это демки сделанные перед сном от нефиг делать. Начинал естественно с рандомного бреда, который просто обитал в моей голове, но потом со временем вырос до реализации вполне крутых концептов. О реальных проектах 95% клиентов даже никогда и не спрашивали. Естественно лучше заодно все еще на гитхаб какой-нибудь выкладывайте, чтобы код сразу могли оценить.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
  • Что отличает сущность вызванную Doctrine (методом find) от той которую мы сами создали?

    Fesor
    Сергей Протько @Fesor
    Full-stack developer (Symfony, Angular)
    Ведь тот же метод $em->persist(...); мы используем и для обновления записи.


    Вообще-то нет. По умолчанию persist используется для того, что бы добавить сущность в UnitOfWork. Вызывая его доктрина начинает разбираться, нам надо просто замерджить сущность в текущий UoW или добавить ее в очередь на вставку.

    Вызывать persist при обновлении не нужно вовсе, можно обойтись merge, и только если у нас используется политика отслеживания изменений deferred-explicit, но это нужно в очень редких случаях. Например когда в рамках одного запроса мы должны загрузить из базы сотню-другую сущностей а обновить одну. В этом плане данная политика отслеживания изменений сильно ускоряет работу UoW, так как мы явно указываем за какими сущностями нам следить (сложность алгоритма UoW - O(N), так что чем меньше N тем быстрее работает). Единственное НО - это сильно усложняет работу с entity manager (по хорошему em должен быть только в репозитории), и в принципе ломает красивую концепцию persistence ignorance, так что использовать ее нужно только тогда, когда есть проблемы с производительностью UoW.

    через каждые 30 насколько изменится скорость переноса?

    Да, это ускорит работу. Единственное что, если вы занимаетесь вставкой большого количества объектов, имеет смысл после каждого flush делать clear, отчищать unit-of-work, поскольку вставленные сущности будут крутиться в нем, и после каждого flush их количество будет увеличиваться и скорость будет падать.
    Ответ написан более трёх лет назад
    12 комментариев
    Нравится 4 12 комментариев
  • В каком редакторе проверить наличие невидимых символов?

    synapse_people @synapse_people
    Нужно отправлять в UTF-8 без BOM, BOM и есть эти невидимые символы(2 или 3 байта в начале)
    Ответ написан более трёх лет назад
    1 комментарий
    Нравится 2 1 комментарий
  • Что лучше почитать для изучения Симфони?

    jaxel @jaxel
    Нет ничего лучше офф доков. Обязательно для изучения Best Practices и Symfony Demo application
    Ответ написан более трёх лет назад
    1 комментарий
    Нравится 1 1 комментарий
  • Проверка реального (выходного) IP сокса. какой командой в линуксе?

    Ernillew
    Эргил Осин @Ernillew
    Администрирую *nix-системы с 1997 года
    «сокса» это socks5?
    curl --socks5 127.0.0.1:1080 http://ifconfig.me
    где 127.0.0.1:1080 — адрес socks5
    Либо замените ifconfig.me на https://ip.lindon.pw, если первый вдруг не отвечает(у него такое случается), но со вторым просьба не злоупотреблять, это мой собственный сервер и я его больше для себя и таких проверок держу(обратите внимание, что у меня https, а не http)
    Ответ написан более трёх лет назад
    2 комментария
    Нравится 2 2 комментария
  • Как отучить fos_rest конвертировать camelCase ключи в underscore?

    prototype_denis
    Денис @prototype_denis
    Symfony
    Ну, во первых это проблема не fos_rest, а сериализатора. По умолчанию jms используется в fos_rest.

    В гугле по запросу "jms_serializer naming_strategy" вы найдёте эту ссылку https://github.com/schmittjoh/JMSSerializerBundle/...
    Пройдя по которой вы обнаружите следующий кусок конфига

    property_naming:
        id: ~
        strategy: camel_case|identical
        camel_case:
            separator: _
            lower_case: true|false
        enable_annotation: true|false
        enable_cache: true|false


    Удачи!
    Ответ написан более трёх лет назад
    1 комментарий
    Нравится 1 1 комментарий
  • Как правильно использовать функцию unserialize?

    Fesor
    Сергей Протько @Fesor
    Full-stack developer (Symfony, Angular)
    1) достаем строку
    2) десериализуем в массив через unserialize
    3) ???
    4) профит

    images?q=tbn:ANd9GcQBCqwyKJ3ubE3LQRh3bJa
    Ответ написан более трёх лет назад
    3 комментария
    Нравится 4 3 комментария
  • Какая программа для захвата видео с окна?

    Foolleren
    Василий @Foolleren
    Компас есть, копать не люблю...
    попробуйте OBS
    свёрнутые окна умеет захватывать(если конечно рендер при этом не отрубается) насчёт звука вообще не понятно что за беззвучный режим
    если микшер выкрутить на 0 то звука для захвата не будет, просто на захват ставим одно устройство а на воспроизведение другое как результат звук есть в захвате, но нет в колонках
    Ответ написан более трёх лет назад
    2 комментария
    Нравится 1 2 комментария
  • Особенности сравнение дат в php?

    alexey-m-ukolov
    Алексей Уколов @alexey-m-ukolov Куратор тега PHP
    string date ( string $format [, int $timestamp = time() ] )

    Поскольку вы неправильно используете функцию date(), сравниваются просто строки. Строки сравниваются посимвольно. Ноль меньше, чем два, поэтому сравнение немедленно возвращает true.

    Правильно сравнивать даты так:
    $first = DateTime::createFromFormat('d.m.Y', '01.01.2016');
    $second = DateTime::createFromFormat('d.m.Y', '25.12.2015');
    var_dump($first < $second);

    Или так:
    var_dump(strtotime('01.01.2016') < strtotime('25.12.2015'));
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 8 Комментировать
Оценили как «Нравится»
  • ← Предыдущие
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • Следующие →
Самые активные сегодня
  • Василий Банников
    • 12 ответов
    • 0 вопросов
  • vesper-bot
    Максим Гришин
    • 11 ответов
    • 0 вопросов
  • rPman
    • 9 ответов
    • 0 вопросов
  • Dr. Bacon
    • 7 ответов
    • 0 вопросов
  • 0xD34F
    0xD34F
    • 7 ответов
    • 0 вопросов
  • DanceM
    Dance Macabre
    • 6 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации