Вконтакте снова выложил свой движок KPHP. Все подробности тут https://telegra.ph/VKontakte-snova-vykladyvaet-KPHP-12-01

Channel
PHP Generation
@php_generation
On this record: Growth · Engagement · What this channel posts · Posts · Citations · Handles named that no longer answer · Cite this entry
5subscribers
+0 since we began measuring on 7 August 2026
Risers and fallers across the register · movement among entries of Under 1,000.
Register entry
| Telegram ID | -1001453878912 |
|---|---|
| Type | Channel |
| Username | @php_generation |
| Description | PHP G - Ваш проводник в увлекательный мир PHP |
| Created | Between 1 April 2019 and 20 March 2021— estimated from Telegram’s id allocation, not measured. How this range is calculated. |
| First recorded | 13 August 2026 |
| Last confirmed live | 21 August 2026 |
| Measurements held | 2 |
| On Telegram | t.me/php_generation |
Growth
| Measured (UTC) | Subscribers | Change |
|---|---|---|
| 13 Aug 2026, 01:32 | 5 | no change |
| 7 Aug 2026, 15:45 | 5 | first reading |
Engagement
20 posts held, back to 20 March 2021 — the reader has not yet reached the start of this channel’s public history, so older posts may sit further back, unread. Read across 1 pageof Telegram’s post history, 20 posts per page.
Nothing published in the last 30 days. ERR and ER are rolling 30-day measures, so there is nothing to compute — we hold 20 posts for this entry, the most recent from 9 April 2021. An engagement rate over an empty window would be a number about nothing.
What this channel posts
- Photos
- 17
- Links
- 18
Lifetime counters from Telegram’s own channel header, read 13 August 2026 — not the date at the top of this page, which is when the subscriber count was last read. Below Telegram’s rounding threshold, so these counts are exact.
Recent posts
Функция для получения всех типов класса Такая функция потребовалась мне для поиска обработчика объекта по типу. Генератор здесь позволяет не рефлексировать раньше времени. https://3v4l.org/EOPjm
Фронт для прожженного бэка Всем привет. Данный пост подойдет новичкам, или прожженным бэкендерам, которым проще написать на го или джаве, чем на js/css. Когда вообще появилось это разделение на Front и Back? Только только у нас в команде был верстальщик, который особо и программистом то не выглядел, и вот вдруг React, Angular, TypeScript, а кто не успел - теперь Backend разработчик. Так что делать, если ты бэкэнд д…
При помощи Generator::valid() можно проверить генератор на пустоту, не обходя его целиком. После вызова $generator->valid() функция генератора начинает выполнение и доходит либо до первого yield (тогда valid возвращает true), либо до конца (valid возвращает false). Интересно, что в первом случае на генераторе можно вызвать rewind без каких-либо последствий, так как обход ещё не начался. Во втором случае генератор за…
Как избавиться от лишних неявных зависимостей 🧹 Рассмотрим классический пример про полифилы. Symfony Console версии 5.1 использует функцию is_countable, которая появилась в PHP 7.3. Чтобы поддерживать PHP 7.2, пакет требует полифил symfony/polyfill-php73. Поэтому когда мы устанавливаем symfony/console в проекте с PHP 7.4, мы получаем не только компонент, но и полифил PHP 7.3, который нам, очевидно, не нужен. Чтобы …
Единственный правильный способ прокинуть логгер ☝️ Что не так с LoggerAware* костылями: • LoggerAwareInterface делает дыру в сервисе методом setLogger. Да и как контракт он абсолютно бесполезен. • В LoggerAwareTrait свойство logger, что бы ни говорил phpdoc, имеет значение по умолчанию null и, соответственно, nullable тип. Значит его либо нужно всегда проверять if ($this->logger !== null), либо как в сниппете иниц…
Аргумент "непустой индексный массив строк" на чистом PHP и с использованием Psalm: function native(string $name, string ...$names): void { foreach ([$name, ...$names] as $name) { // ... } } /** * @psalm-param non-empty-list<string> $names */ function psalm(array $names): void { foreach ($names as $name) { // ... } } Оба варианта по-своему интересны, выбирайте исходя из типичного к…
Как получить все типы значения Для примитивов всё просто — в PHP 8 теперь есть функция get_debug_type, она возвращает тип в привычном формате. В случае объекта помимо класса нужно вернуть список суперклассов (умное название для родительских) и интерфейсов. Проще всего их добыть встроенными функциями class_parents и class_implements. Что касается порядка отдаваемых типов, как правило, требуется сортировка от конкре…
Оператор new в инициализаторах https://wiki.php.net/rfc/new_in_initializers Не прошло и недели после стрима, как Никита Попов опубликовал обещанный RFC, разрешающий использовать new в инициализаторах. Если его примут, то в качестве дефолтных значений статических переменных, параметров, констант и свойств можно будет использовать объекты. Интересно, что в рамках этого предложения атрибуты тоже получат право исполь…
Обработка deadlock в Doctrine Проблему взаимных блокировок в первую очередь надо решать исходя из контекста, где они возникают. Однако если дедлоки стреляют изредка, можно предусмотреть простой retry. Удобнее всего его реализовать как middleware для command bus и там поймать Doctrine\DBAL\Exception\RetryableException. Помните, что после ошибки EntityManager закрывается. В Symfony его можно оживить вызовом метода re…
Раньше, чтобы создать nullable ValueObject из nullable примитива, приходилось писать колбасу вроде null === $stringClientId ? null : ClientId::fromString($stringClientId). Сегодня условные типы Psalm позволяют перенести if в статический конструктор: /** * @template T of ?string * @psalm-param T $id * @psalm-return (T is null ? null : self) */ public static function fromString(?string $id): ?self { if (null…
Как часто вы сталкиваетесь с проблемой, когда для тестирования задачи приходится менять код? Тесты отложенной отправки письма, генерации чего-то по расписанию раз в неделю и т.д. Badoo имеет свое собственное решение, которое упрощает жизнь тестировщикам. Все тут: https://telegra.ph/API-dlya-QA-testiruem-fichi-bez-dostupa-k-kodu-12-01
Showing the 12 most recent of 20 posts we hold for @php_generation. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.
Mentions
Names
Channels on the register whose handles appear in this channel's posts.
A mention is a weaker signal than a forward and is counted separately for that reason — naming a channel is not republishing it, and a handle in a post body is easy to place deliberately. The post counts beside each row below are distinct posts in which the handle appeared, from posts we have read on both sides — the “Named by N registered channels” figure above is a different count, of distinct NAMING CHANNELS rather than posts, and is not the sum of the rows under it.
Handles this channel named that no longer answer
- Dead references
- 1
- handles named in this channel’s posts, vacant today
- Evidenced gone
- 0
- we ourselves saw one of these resolve, at some point
- Never seen alive
- 1
- vacant every time we have ever looked
@php_generation named 1 handle that resolve to nothing today. That is a fact about the reference, not necessarily a fact about the handle’s history — see the two groups below.
Most of these may never have existed as a live channel at all.A handle a channel names can be a typo, an aspirational name nobody registered, or a channel that was already gone before this one ever mentioned it. Unless a row below is marked evidenced, all we know is that it references a handle that is not a live channel today — not that anything “died”. How this is measured.
Never seen alive
References a handle that is not a live channel — we have no record it ever was one.
named in 1 post, 14 August 2026 – 14 August 2026
Cite this entry
A live page changes as we take new readings, so a citation should name the measurement it is based on, not just the URL. The line below cites the subscriber count as measured 13 August 2026 — this entry's latest reading, not the date you are reading this.
“PHP Generation” (@php_generation), 5 subscribers as measured 13 August 2026. Telegram Register, tgregister.com/channel/php_generation.
Full measurement history, CC BY 4.0. Every reading this register holds for this entry, not just the latest one, as a dated, downloadable record: CSV · JSON. Free to use with attribution to tgregister.com. Each file carries its own generation timestamp, which is the figure to cite for exactly when the data was retrieved.