在创建类时,我遵循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;
}
}
}
这是一个好方法吗? 我认为动态生成的属性默认具有公共访问权限,因此这可能是一个缺点,这种自动化可能是一个优势。 在绩效方面有什么不同吗?
答案 0 :(得分:5)
我们不鼓励你这样做,但在某些情况下你只需要(就像在ORM中,你似乎在写作)。类应该有干净的接口(程序员需要知道他可以对你的类做什么)。
但是有一种更好的处理这些案例的方法(至少对我来说似乎更好)。在类中准备一个关联的数据数组,并使用__get
方法。对于ORM来说甚至可能更好(你可以实现延迟加载等)。
答案 1 :(得分:2)
如果您正在编写许多用户应该使用的代码(库),那么最好严格定义API。这样在实施时就会减少混乱。但是如果你将它用于一个案例就不会那么糟糕,事实上它可以提供很大的灵活性。
答案 2 :(得分:1)
这取决于您的情况。当您拥有直接映射到表(或某些其他结构)的数据容器时,这是一种常见做法。最常用于ORM,因为列是在运行时确定的,您不需要为每个表定义容器类。
答案 3 :(得分:1)
这完全取决于您希望如何利用这些公开可用的变量。例如,在像Symfony这样的框架中,可以很好地利用它们。所有动态类变量都可以在类之外的模板中使用。
如果你有创意,这可能是一个很好的做法