PHP中的部分类,就像我们在C#中一样

Ris*_*hak 19 php c# oop

是否有任何简单的方法在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存在的条件,并且必须确保在重新生成类时,手写的特征代码不会被破坏.

但是,它可能是多少你的利益考虑对象组合了这种方法.

有时我觉得生成的代码方法可以更清晰,例如"实体"类型,但这是个案的情况.


Luc*_* C. 6

PHP使用Traits:

http://php.net/manual/en/language.oop5.traits.php

它们允许您将绝缘部分文件(Trait)中的类部件包含到共享其逻辑的其他类中,也可以包含其他共享逻辑(如多重继承)