TGViewer
Channel Public Channel
Пых

Пых

@phpyh

Блог Валентина Удальцова о разработке на PHP.

Хобот @phpyhobot
https://youtube.com/@phpyh
https://vkvideo.ru/@phpyh
https://t.me/isPHPdying

Статистика: https://t.me/INOTAROBOT?start=st1219340804

Для связи используйте личные сообщения канала.
Subscribers
7.82K
Photos
287
Videos
20
Links
629

Showing posts older than #412 · Back to latest

Older Posts 20 shown
Post #411 6.65K
Код-румы для онлайн-собеседований

В этом месяце провожу для Evrone технические собеседования на позицию Middle/Senior PHP разработчика и активно использую Yandex Code для практических заданий.

Раньше я всё делал сложнее для собеседуемого: давал ссылку на Gist с заданием и просил пошарить экран с IDE. Сейчас просто создаю комнату с условием задачи, отправляю ссылку кандидату, и через пять секунд мы уже обсуждаем и правим один и тот же сниппет. Это как Google Docs или как если бы Code With Me от JetBrains был доступен прямо в браузере.

https://code.yandex-team.ru/

Об инструменте узнал от @adrenaL1nkin на собеседовании в Webinar. 😊
  • 👍 40
  • 🔥 13
  • 👎 9
  • 💩 8
Post #410 8.51K
Пых Ну что ж, давно не виделись?! Линч в 19:00! Расскажу, как у меня дела, какие планы на ближайшее время, и конечно же посмотрим проекты, которые вы скинете. До встречи! https://youtu.be/lmTsDyF4e6A
0:00 Упс, я забыл, как запускать стрим...
0:43 php-farttime
2:40 Я теперь работаю на себя
6:08 Анонс курса по PHP
26:40 Статус моих OpenSource-проектов
30:22 Линч zlodes/php-prometheus-client
55:20 Почему в Symfony рецепты лежат не вместе с бандлами
57:30 Ответы автора zlodes/php-prometheus-client на мои замечания
58:08 Зачем чувствовать себя тупым
1:01:54 Создаём окно при помощи SerafimArts/ffi-sdl
1:17:25 PhpStorm или Vim? Аналогия с барабанами О_о
1:20:36 Constructor Property Promotion
1:21:16 Почему я не использую Copilot
1:24:34 И снова про белую тему
1:27:36 Я долго дебажу автокомплит SDL и вывожу-таки на экран картинку!
2:04:05 Почти делаю Кириллу Pull Request
2:08:22 Финал
  • 👍 34
  • 🔥 11
  • ❤ 4
  • 💩 2
  • 🤔 1
Post #409 7.27K
Пых Ну что ж, давно не виделись?! Линч в 19:00! Расскажу, как у меня дела, какие планы на ближайшее время, и конечно же посмотрим проекты, которые вы скинете. До встречи! https://youtu.be/lmTsDyF4e6A
Audio
  • 😁 11
  • 👍 3
Post #408 7.23K
Post #407 6.44K
  • 🗿 70
  • 👍 35
  • 😱 19
  • 💩 17
  • 🤔 7
  • 🔥 3
  • 😁 3
  • 🤡 1
Post #406 5.89K
  • 👍 6
Post #405 9.06K

Forwarded from Сергей Предводителев

🌿 Про атрибут Override в PHP 8.3

В PHP предлагается добавить специальный атрибут #[Override], с помощью которого можно будет явно помечать методы, которые переопределяют методы из родительского класса. Например:

class Parent {
protected function run(): void {}
}

class Child extends Parent {
#[\Override]
public function run(): void {}
}

Если в классе Parent убрать метод run(), то будет брошено исключение.

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

Всё идёт к тому, что RFC будет принят (на текущий момент 20 голосов за и 0 против) и мы увидим #[Override] в PHP 8.3.

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

При изучении и разработке кода #[Override] позволит сразу понимать, что этот метод переопределяет родительский, и сократит время на выявление ошибок.

Возможно, стоит в будущем (PHP 9 или 10 😎) вообще сделать добавление атрибута #[Override] для переопределяющих методов обязательным. Отсутствие атрибута в этом случае будет гарантировать, что метод ничего не переопределяет.

Но у этой идеи есть и противники. Интересные обсуждения развернулись на reddit и externals.io 👀
  • 🔥 43
  • 👍 23
  • ❤ 6
  • 👎 5
  • 😁 1
  • 😢 1
  • 👀 1
Post #404 10.2K
  • 🤯 78
  • 🔥 15
  • 👍 8
  • 👎 4
  • 🌚 2
Post #403 9.31K
<?php

namespace A;

echo namespace\B\C::class;
Post #402 10.3K
Пых Как в рантайме получить путь до текущего автолоадера? Сейчас работаю над PHP Extended Type System, и появилась задача использовать автолоадер Composer для получения файлов незагруженных классов по их имени. При этом хочется, чтобы по умолчанию пользователю…
Всё гораздо проще!

Я так и чувствовал, что надо было написать пост не только чтобы поделиться, но и потому что я что-то упустил.

@xepozz в комментариях к посту рассказал про метод ClassLoader::getRegisteredLoaders(), который возвращает массив активных лоадеров, проиндексированных по пути до vendor. А это ровно то, что мне было нужно!

Теперь локатор и тест тривиальные: https://gist.github.com/vudaltsov/c7348a8aa54d0ada82c22134c6156001. ComposerClassLocator покроет 95% случаев подгрузки пользовательских классов. В остальных 5% можно будет имплементировать свой локатор и через компоновщик объединить с другими.

Спасибо огромное за то, что вы всегда так внимательно читаете посты и пишете кучу полезных комментариев! 💙
Gist ComposerClassLocator.php GitHub Gist: instantly share code, notes, and snippets.
  • 🔥 40
  • 👍 15
  • ❤ 11
Post #401 9.4K
Как в рантайме получить путь до текущего автолоадера?

Сейчас работаю над PHP Extended Type System, и появилась задача использовать автолоадер Composer для получения файлов незагруженных классов по их имени. При этом хочется, чтобы по умолчанию пользователю библиотеки не надо было явно указывать путь до autoload.php. Библиотека должна по возможности угадать его сама.

Первое, что приходит в голову, — просчитать и захардкодить путь. Например, если у нас пакет называется extended-type-system/type-reflection, а класс локатора расположен в src/ClassLocator/ComposerAutoloadClassLocator.php, то после установки библиотеки путь от класса до автолоадера будет __DIR__ . '/../../../../autoload.php'.

Теперь попробуем покрыть это тестом. Первый вариант — засимлинкать текущий автолоадер в нужную локацию и инстанциировать локатор. Получим максимально дурацкий и хрупкий тест, да ещё и выйдем за пределы рабочей директории. Второй вариант — честно установить либу в отдельной папке с использованием репозитория type: path, symlink: false и инстанциировать локатор там. Вот только запускать это всё придётся в отдельном процессе, иначе копия класса будет конфликтовать с исходником в пространстве имён. Короче, сложно и тоже хрупко.

Поэтому я ещё почесал репу и придумал, как вообще отвязаться от расположения класса локатора:

use Composer\Autoload\ClassLoader;

$classLoaderFile = (new \ReflectionClass(ClassLoader::class))->getFileName();
$autoloadFile = dirname($classLoaderFile, 2) . '/autoload.php';
$autoloader = require $autoloadFile;


То есть мы через рефлексию получаем путь к генерируемому композером классу ClassLoader (это, кстати, публичный контракт, на него можно смело положиться), а уровнем выше забираем наш autoload.php.

При втором подходе локатор устойчив к перемещению и легко тестируется с текущим автолоадером.
  • 👍 39
  • 🔥 15
  • ❤ 3
Post #400 7.04K
🔴 PHP-линч #18

Сегодня на линче новый компонент Yii 3: Hydrator! Мне его на днях скинул Сергей Предводителев, член экипажа Yii. Кстати, подписывайтесь на его канал @sergei_predvoditelev.

По просьбам трудящихся пробуем стартовать позже, в 19. 😉

https://youtu.be/4_TVEgU3rpM
YouTube PHP-линч #18 Внимание! Чтобы YouTube опубликовал ваш комментарий, пишите не полный URL, а, например, гитхаб/symfony/console. Как устроен PHP-линч: 1. Во время стрима вы скидываете в чат трансляции ссылки на репозитории и в трёх словах описываете, что там. Это может быть…
  • 🔥 21
  • 👍 6
  • ❤ 1
Post #399 8.12K
Post #398 9.04K
Post #397 10.4K
Пых 🔴 PHP-линч #15 Продолжаем обсуждать Symfony #[MapRequestPayload], заходи! https://youtu.be/lHXrYr134tw
🔥 Уххх, сегодня забористо получилось! Советую посмотреть.
  • 👍 28
  • 🔥 11
  • ⚡ 4
  • ❤ 4
  • 🦄 2
  • 👎 1
  • 🤔 1
  • 🏆 1
Post #396 9.25K
Post #395 8.52K
Post #393 7.02K
🎮 DatsArt Space

Мои хорошие друзья DatsTeam организовали очередной хакатон, в котором командам предстоит написать «геймпад» к некой «игровой консоли» и сыграть при помощи него в игру. Условия хакатона не ограничивают участников в выборе технологий, поэтому среди участников есть и пыхари! Пожелаем им удачи!

Прямая трансляция стартует с минуты на минуту: https://youtu.be/OSDZVHsUSmE
YouTube Хакатон DATSART от компании DatsTeam Шестой хакатон от DatsTeam - DatsArt Space! На первом этапе (21 апреля 17:00 - 22 апреля 16:00) команды создают свои варианты наших шедевров и получают баллы. Второй этап состоится 22 апреля 17:00 - 20:00 Условия хакатона не ограничивают участников в выборе…
  • 🔥 6
  • 👍 5
  • ❤ 3
  • 🍾 1
Post #392 6.45K
👨‍🔬 Новая лекция от Пыха. LRU мемоизация. Часть 2. Из O(n) в O(1)

Наконец-то записал вторую лекцию про LRU мемоизацию! Из неё вы узнаете, какая структура данных позволит нам получить решение с алгоритмической сложностью O(1) и как её построить самому. По дороге, как обычно, касаюсь ещё нескольких интересных мелочей.

https://boosty.to/phpyh/posts/64ce92fa-836d-4b5b-9035-c28074c13e3c
  • 👍 15
  • 🔥 8
  • 💩 3
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →