Получи случайную криптовалюту за регистрацию!

Пых

Логотип телеграм канала @phpyh — Пых П
Логотип телеграм канала @phpyh — Пых
Адрес канала: @phpyh
Категории: Технологии
Язык: Русский
Количество подписчиков: 6.51K
Описание канала:

Блог @vudaltsov о разработке на PHP.
Чтобы поддержать канал, подпишись на Пых Boosted: https://boosty.to/phpyh.
Реклама и вакансии НЕ размещаются.

Рейтинги и Отзывы

4.00

2 отзыва

Оценить канал phpyh и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

2

3 звезд

0

2 звезд

0

1 звезд

0


Последние сообщения 3

2022-01-14 10:11:06 uniqid()

Функция uniqid — простой и быстрый способ получить ±уникальную криптографически небезопасную строку.

Как она работает? Функция берёт секунды и микросекунды, прошедшие с начала эпохи Unix, и конкатенирует их в шестнадцатиричном представлении:

function uniqid(): string
{
$time = gettimeofday();

return sprintf('%x%x', $time['sec'], $time['usec']);
}

Таким образом, выдаваемая строка имеет длину 13 символов (как посчитать длину самому). Если требуется меньше, то отрезать нужно с конца, так как наибольшей энтропией обладают последние знаки. Например, чтобы получить 8 символов, используем выражение substr(uniqid(), -8).

Первый необязательный параметр $prefix эквивалентен конкатенации $prefix.uniqid().

Второй необязательный параметр $more_entropy добавляет к результату псевдослучайное число, что снижает риск получить одинаковые значения в параллельных процессах. Такая строка содержит 23 символа и имеет вид 61e0e81a580527.28156047.

Не стоит относиться к этой функции слишком серьёзно, но в простейших случаях, например, при именовании каких-нибудь временных штук, она избавит вас от .
2.4K viewsВалентин Удальцов, 07:11
Открыть/Комментировать
2022-01-12 13:11:17 Avoid FPM reloading?

На днях гулял по документации Deployer 7 и набрёл на статью Avoid PHP-FPM Reloading.

Там даётся известная рекомендация использовать при конфигурации NGINX переменную $realpath_root вместо $document_root для SCRIPT_FILENAME. Это нужно для того, чтобы в opcache попадал реальный путь вместо симлинка и не было проблем при деплойменте. То же самое можно прочитать, например, в комментариях к примерному конфигу NGINX для Symfony.

У нас так и настроено, однако от мягкой перезагрузки FPM мы не можем отказаться, так как используем preloading. И поэтому в статье меня смутила фраза "...reload can lead to dropped or failed requests".

Погуглил, вроде FPM должен корректно завершать запросы, активные на момент reload. Да и мы за пару лет не видели релевантных ошибок при деплойментах. Поэтому считаю дисклеймер неверным. Также нашёл твит на Пятиминутке PHP с полезными ссылками про деплоймент и opcache.

Вот такой дискуссионный пост получился. Пишите в комментариях, что думаете!
2.6K viewsВалентин Удальцов, edited  10:11
Открыть/Комментировать
2022-01-10 09:53:01
Организация миграций Doctrine

В Doctrine Migrations есть классный параметр organize_migrations. Он позволяет группировать файлы миграций по годам (BY_YEAR) или по годам и месяцам (BY_YEAR_AND_MONTH). Рекомендую сразу переходить на BY_YEAR_AND_MONTH.

Переключиться можно в любой момент. Для этого достаточно поправить конфиг и запустить мою команду — она раскидает файлики по нужным директориям. Команда расчитана на дефолтный Version{date} нейминг миграций.

https://symfony.com/bundles/DoctrineMigrationsBundle/3.2.x/index.html

https://www.doctrine-project.org/projects/doctrine-migrations/en/3.3/reference/configuration.html
3.6K viewsВалентин Удальцов, edited  06:53
Открыть/Комментировать
2021-12-30 10:20:38 Итоги года

В контексте PHP год пролетел для меня очень быстро, думаю, вы заметили по активности. Одна из причин — много интересной работы. Зато накопил уйму идей для постов и видео — буду исправляться.

Ачивки
Попробовали с Ромой новые форматы: интервью, Clubhouse что это?, Дайджест Live. Запустили канал с мемесами PHP умирает?!
Выступил на 4 оффлайн-конференциях и митапах. PHP привёз меня в Брянск, Нижний Новгород и Ростов-на-Дону. Зовите ещё — я с удовольствием путешествую по России!
Меня показали по телеку, и там я ответил на главный вопрос века репортёра: «Скажите, за базами данных будущее?»
Пых получил свой логотип.
В Пыхтелке появились админы, флуда и спама стало меньше. Спасибо ребятам большое!
Моё отношение к трейтам не изменилось, но я законтрибьютил один в roave/dont.
Вошёл в программный комитет PHP Russia 2022.

Фейлы
Нерелиз Thesis. Но я не отчаиваюсь! Yii3 ведь тоже не вышел. Недавно уделил либе несколько дней в отпуске и решил пару организационно-архитектурных проблем. Обещать ничего не буду, просто скажу, что идея жива и мы по-прежнему радостно используем Thesis на работе.

Всем спасибо за участие в сообществе, до встречи в году!
Пройдите, пожалуйста, опрос — он наводит мост в 2022!

https://phpsurvey.typeform.com/to/fqX8iwnT
2.1K viewsВалентин Удальцов, edited  07:20
Открыть/Комментировать
2021-12-29 10:00:38
Какой вариант оптимальнее по памяти? (Какая переменная меньше?)
Anonymous Quiz
45%
Первый ($toStringAsKeyMemory)
55%
Второй ($toHexAsKeyMemory)
1.2K voters2.8K viewsВалентин Удальцов, 07:00
Открыть/Комментировать
2021-12-29 10:00:38
2.8K viewsВалентин Удальцов, 07:00
Открыть/Комментировать
2021-12-10 13:56:49
Ночное образовательное шоу IT Nights 3.0

Приглашаю сегодня всех в 19:00 на IT Nights. Будут спикеры из Facebook, Яндекса, JetBrains, VK, X5 Group.

Меня заинтриговал доклад Изменения — единственная константа в IT и рыцарский турнир, в котором примут участия ребята с Podlodka, Егор Толстой и Стас Цыганов.

По промокоду phpyh скидка 20%.
3.0K viewsВалентин Удальцов, edited  10:56
Открыть/Комментировать
2021-12-02 14:29:58 Ищу к себе в команду middle/senior разработчика!

В Happy Inc мы исследуем вовлечённость и лояльность персонала в крупных компаниях: проводим анонимные опросы, строим сложные отчёты, доставляем их клиентам в различных форматах.

У нас модульный монолит без легаси. PHP 8.0 / Symfony 5.3 / PostgreSQL 12 / OpenAPI 3 / EventSourcing / Psalm на максималках / Thesis и всё, о чём я тут рассказываю.

Full-time, Москва, БЦ Варшавка Sky, ЗП по результатам собеса.

Резюме можно присылать сразу мне в ЛС @vudaltsov.
2.4K viewsВалентин Удальцов, 11:29
Открыть/Комментировать
2021-11-25 19:04:06 PHP 8.1 уже в эфире, подключайтесь!



1.5K viewsВалентин Удальцов, 16:04
Открыть/Комментировать
2021-10-07 17:18:49 ?-> вместо NullObject: по следам дискуссии

Предыдущий пост бурно и полезно обсудили, расписываю основные мысли.

"За" и "против" использования ?-> для опциональных зависимостей:
самый лаконичный способ до выхода PHP 8.1 (там можно будет использовать new для значений параметров по умолчанию);
обходится дешевле в рантайме, так как в null-сценарии выполняется меньше кода (сразу оговорюсь, что это вообще сомнительный аргумент, в частности, трудно себе представить приложение без логгирования в продакшне);
скрытый и "ненужный" if;
NullObject — более корректное и универсальное с точки зрения ООП решение, null-safe подход может быть уместен только в нескольких случаях;
на проекте без статического анализатора вероятность ошибки выше.

Также в Пыхтелке затронули очень важную тему: зависимости редко бывают опциональными. Действительно, nullable зависимости часто сигнализируют о нарушении SRP. Необязательные поведения лучше оформлять в виде декораторов или middleware — их легко включать и выключать, не изменяя код (см. OCP).

Что касается логгирования, его не всегда можно представить в виде декоратора. Зачастую полезная для логов информация инкапсулирована в реализации и не протекает через контракт. Скорее всего, в этом случае тоже где-то нарушается SRP, но добавление абстракции исключительно ради логгирования может быть неоправданным усложнением.

И последний нюанс: зачем вообще делать логгер опциональной зависимостью, если он всегда есть в контейнере? Мой ответ простой: лень. В юнит-тестах, не тестирующих само логгирование, не хочется каждый раз писать new Service(/** required dependencies, */ new NullLogger()) .

Итак, теперь мы знаем, что можно вот так нестандартно использовать ?->, но что это не всегда хорошая идея. Всем спасибо за комментарии!
2.5K viewsВалентин Удальцов, edited  14:18
Открыть/Комментировать