PHP 中的部分类,就像我们在 C 语言中一样#
有没有简单的方法可以在PHP中拥有像C#中那样的分部类概念?我试图使用不同的命名空间使它成为可能,但它无法正常工作。
有没有简单的方法可以在PHP中拥有像C#中那样的分部类概念?我试图使用不同的命名空间使它成为可能,但它无法正常工作。
它们不存在。
但是,如果您尝试实现可以附加用户土地代码的代码生成器(遵循与C#中相同的用例),那么以下可能是一个可行的选择:
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
但是,考虑对象组合而不是此方法可能对您大有裨益。
*有时我觉得生成的代码方法可以更清晰,例如“实体”类型,但这是个案。
PHP 将 Traits 用于此任务:
http://php.net/manual/en/language.oop5.traits.php
它们允许您将类部分从隔离的分部文件(Trait)包含到共享其逻辑的不同类中,也可能包括其他共享逻辑(如多重继承)