TGViewer
Пых Пых @phpyh · 7.82K subscribers
Post #447 12.3K
Я сделал перегрузку методов для PHP!

К выходу PHP 8.3 я решил реализовать фичу, которая в новой версии не только не появилась, но и была окончательно выпилена (с чем я согласен).

Итак, вот мой вариант оверлоадинга/перегрузки/Ad-hoc-полиморфизма для PHP:


use Typhoon\Overloading\Overload;

final readonly class WhateverHandler
{
public function handle(mixed ...$args): string
{
return Overload::call();
}

#[Overload('handle')]
public function handleInt(int $int): string
{
return __METHOD__;
}

#[Overload('handle')]
public function handleIntAndFloat(int $int = 0, float $float = M_E): string
{
return __METHOD__;
}
}

$handler = new WhateverHandler();

// WhateverHandler::handleInt
var_dump($handler->handle(300));

// WhateverHandler::handleIntAndFloat
var_dump($handler->handle(float: 1.5));


В перегружаемый метод пишем один-единственный вызов Overload::call(). Он, кстати, специально ничего не принимает, чтобы упростить использование и избежать ошибок. Затем добавляем перегружающие методы с такой же статичностью/видимостью и помечаем их атрибутом #[Overload('перегружаемый метод')]. Вуаля! Теперь можно вызывать перегружаемый метод с аргументами различных типов, а Overload будет передавать поток управления в методы с подходящей сигнатурой.

Главный вопрос, конечно, скорость. Но несмотря на то, что это реализация в первом приближении и есть идеи по улучшению, уже работает достаточно шустро. Благодаря мемоизации в воркерах капитальной разницы с прямым вызовом не будет, особенно если перегруженных методов не очень много. Для PHP-FPM предусмотрен кэш с поддержкой OPcache (примерно как в докладе).

Короче, ставьте, экспериментируйте, закидывайте идеи в комментарии и в Issues в репозиторий.

https://github.com/typhoon-php/overloading

P.S. Всех с третьей восьмёркой! 🎉
  • 🔥 71
  • 👍 31
  • 💩 17
  • ❤ 7
  • 👎 6
  • 🤯 6
  • 💊 5
  • 😁 2
  • 🤩 2
More from @phpyh
  1. Sep 30, 2026🍺 BeerPHP AI Moscow Кажется, «неделя PHP» потихоньку превращается в месяц PHP. 😅 Будет 2…
  2. Sep 28, 2026Запустили Пыхник и неделю PHP! Залетайте на первый открытый доклад от Дмитрия Dantes про к…
  3. Sep 15, 2026Сейчас один человек с AI может выполнять работу целого IT-отдела. Только хуёво
  4. Sep 12, 2026Спасибо за заявки! Всем напишу в понедельник. Осталось 1 место.
  5. Sep 11, 2026Хардкорный курс асинхронного PHP https://hardcourse.ru/php/async
  6. Sep 11, 2026Ещё полчасика надо — сайт готов, расписываю программу! 🙏
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 →