是否有任何简单的方法在PHP中使用部分类的概念,就像我们在C#中一样?我试图使用不同的命名空间,但它无法正常工作.
Dan*_*ugg 18
它们不存在.
但是,如果您正在尝试实现可以附加用户区代码的代码生成器(遵循与C#中相同的用例),那么以下可能是一个可行的选项:
class Generator
{
public function generate(Definition $definition)
{
if ($this->shouldGenerateTraitFor($definition)) {
$this->generateTraitFor($definition);
}
$this->generateClassFor($definition);
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于上面的一些实现,您可以:
(new Generator())->generate(new Definition([
'class' => 'GeneratedClass',
'trait' => 'GeneratedTrait',
]));
Run Code Online (Sandbox Code Playgroud)
结果代码可能类似于:
class GeneratedClass
{
use GeneratedTrait;
}
trait GeneratedTrait
{
// @todo; add "partial" code
}
Run Code Online (Sandbox Code Playgroud)
值得注意的Generator::shouldGenerateTraitFor是,如果它返回false,则不会重新生成特征.这可能是GeneratedTrait.php存在的条件,并且必须确保在重新生成类时,手写的特征代码不会被破坏.
但是,它可能†是多少你的利益考虑对象组合了这种方法.
†有时我觉得生成的代码方法可以更清晰,例如"实体"类型,但这是个案的情况.
PHP使用Traits:
http://php.net/manual/en/language.oop5.traits.php
它们允许您将绝缘部分文件(Trait)中的类部件包含到共享其逻辑的其他类中,也可以包含其他共享逻辑(如多重继承)