parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

G_Z 24.10 01:09 / 24.10 01:11

Я плохие примеры привёл, удалил сообщение, а оно появилось.
Вот так, вроде, понятнее:
@main[]
^foo:identify[]
^bar:identify[]


@CLASS
interface

@identify[]
interface


@CLASS
mixin

@identify[]
^BASE:identify[] of $self.CLASS_NAME


@CLASS
baz


@CLASS
bat


@CLASS
foo

@BASE
baz

@auto[]
^reflection:mixin[interface;$.methods(true)]


@CLASS
bar

@BASE
bat

@auto[]
^reflection:mixin[interface;$.methods(true)]
Результат:
interface of foo
interface of bar
Ну он писал, "аналог механизма Трейтов". Mixin делает ровно требуемое.
Не знаком настолько глубоко с тонкостями трейтов в PHP, там такие финты с обращениями не поддерживаются?
Но конкретно BASE использовать в подмешиваемых методах нельзя, надо получать базовый класс через reflection, $base[^reflection:base[$self]].
Да, но это заставляет подмешиваемые классы знать, что их будут подмешивать.
А если бы mixin корректировал @BASE с абстрактного на фактический, то подмешиваемые классы были бы простыми, без знаний о возможности микширования и необходимости использования рефлексии.

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

У меня подмешивание используется, но без наследования.
Если где-то наследование в подмешиваемых классах и есть, то классическое.