在PHP中创建动态类变量是个好主意吗?

时间:2011-05-21 07:41:52

标签: php oop

在创建类时,我遵循OO约定并在使用它们之前声明所有类变量:

    class myClass {
      private $property1, $property2, ...;

      public __constructor() {
         $this->property1 = $this->property2 = NULL;
      }

    }

但是我意识到PHP是脚本语言而不是严格遵循OO概念,因此我们可以动态“生成”类属性:

    class myClass {
      public __constructor() {
         $this->fields = $this->db->getFields(TABLE_NAME);

         foreach($this->fields as $fld) {
           $this->{$fld} = NULL;
         }
      }

    }

这是一个好方法吗? 我认为动态生成的属性默认具有公共访问权限,因此这可能是一个缺点,这种自动化可能是一个优势。 在绩效方面有什么不同吗?

4 个答案:

答案 0 :(得分:5)

我们不鼓励你这样做,但在某些情况下你只需要(就像在ORM中,你似乎在写作)。类应该有干净的接口(程序员需要知道他可以对你的类做什么)。

但是有一种更好的处理这些案例的方法(至少对我来说似乎更好)。在类中准备一个关联的数据数组,并使用__get方法。对于ORM来说甚至可能更好(你可以实现延迟加载等)。

答案 1 :(得分:2)

如果您正在编写许多用户应该使用的代码(库),那么最好严格定义API。这样在实施时就会减少混乱。但是如果你将它用于一个案例就不会那么糟糕,事实上它可以提供很大的灵活性。

答案 2 :(得分:1)

这取决于您的情况。当您拥有直接映射到表(或某些其他结构)的数据容器时,这是一种常见做法。最常用于ORM,因为列是在运行时确定的,您不需要为每个表定义容器类。

答案 3 :(得分:1)

这完全取决于您希望如何利用这些公开可用的变量。例如,在像Symfony这样的框架中,可以很好地利用它们。所有动态类变量都可以在类之外的模板中使用。

如果你有创意,这可能是一个很好的做法