Ответ 1
Они не существуют.
Если, однако, вы пытаетесь внедрить генератор кода, для которого может быть присоединен код пользовательской земли (следуя одному и тому же варианту использования, как на С#), тогда может быть жизнеспособным вариантом:
class Generator
{
public function generate(Definition $definition)
{
if ($this->shouldGenerateTraitFor($definition)) {
$this->generateTraitFor($definition);
}
$this->generateClassFor($definition);
}
}
Учитывая некоторую реализацию, как показано выше, вы можете:
(new Generator())->generate(new Definition([
'class' => 'GeneratedClass',
'trait' => 'GeneratedTrait',
]));
И получившийся код может напоминать:
class GeneratedClass
{
use GeneratedTrait;
}
trait GeneratedTrait
{
// @todo; add "partial" code
}
Важно отметить, что Generator::shouldGenerateTraitFor
заключается в том, что если он возвращает false
, этот признак не будет восстановлен. Это может быть обусловлено тем, существует ли GeneratedTrait.php
и необходимо, чтобы при восстановлении класса рукописный код штриха не сбивался.
Однако, этот † был бы полезен для рассмотрения композиции объекта по этому подходу.
† Есть моменты, когда я чувствую, что сгенерированный подход к коду может быть более чистым, например, с типами "сущность", но в каждом конкретном случае.