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

标签 c# php oop

有没有什么简单的方法可以像我们在 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/

相关文章:

c# - 许多构造函数参数 - 有更好的方法吗?

c# - LINQ 查询取决于孙子集合

php - print_r 返回值不正确

php - Drupal:在外部 php 文件中插入五星级小部件

ios - UIView 类对父 View Controller 有太多委托(delegate)方法?

c++ - 我的 C++ 游戏架构

c# - 装饰模式问题C#/java

c# - IObservable TakeLast(n) 和阻塞

php - 如果body class hasclass添加js 如果没有添加这个js

c++ - 你应该在成员函数中传递成员变量吗?