有没有什么简单的方法可以像我们在 C# 中那样在 PHP 中拥有 partial class 的概念? 我尝试使用不同的命名空间使其成为可能,但它无法工作。
最佳答案
它们不存在。
但是,如果您正在尝试实现可以附加用户态代码的代码生成器(遵循与 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
是否存在为条件,并且是确保在重新生成类时手写特征代码不会被破坏所必需的。
但是,考虑*对您有很大好处object composition超过这种方法。
* 有时我觉得生成代码的方法可以更简洁,例如使用“实体”类型,但这是个案。
关于c# - PHP 中的部分类就像我们在 C# 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21657684/