2012-06-20 79 views
2

我想知道哪种方式更适合使用。 在控制器类中使用私有属性,或仅将一个私有属性用作属性数组。属性vs PHP属性数组OOP

相反的:

class User{ 

    private $id; 
    private $firstName; 
    private $surname; 
    private $age; 
    private $gender; 
    private $city; 
    ... 
    ... 
} 


class User{ 

    private $data; 
} 

,然后可以做这样的事情:

function __construct(){ 
    //this would contain id, firstName, username, age, gender... 
    $data = $model->getData(); 
} 

感谢

回答

2

使用数组你将失去任何自动完成工具,而在你的类编写代码。您将失去在您的属性上检测到语法错误的能力。实际上,你会让代码更混乱,描述性更少。

使用对象通常是一件好事,可以提供更好的可维护性,可以与多个开发人员共享,或者在您写完数个月或数年后与您分享。在我看来,你应该保持属性。一个更令人困惑的代码可能是'优化的,或者更短的来读取,但是如果你只想写汇编代码。如果您想制作目标代码,请使用clean的方式执行目标代码,您将总能找到一种可以节省您未来生活的情况。

这里的问题在于,您可能认为在对象属性和模型图层列之间保持干净的映射是一种真正的痛苦。但无论您尝试什么,这都是您在所有应用程序中始终需要编码的最低要求,如果尚未完成,您在使用对象时仍需知道这些属性。机会是,这是一个Pattern of Failure

我们大多数的开发者拥抱不要重复自己/复制是邪恶的原则,我们应用我们始终能为我们的软件创建。但是我们可以做的最致命的缺陷之一是太快而且过于宽泛地挥舞抽象的魔杖,我们经常忘记不必要的重复造成的后果远远小于不必要的合并的结果。

有了您的DataModel装载的例子,我可以看到例如两个潜在的未来的问题:

  • 让我们想象一下,将来你就会有一个二元属性,该属性要求延迟加载,无论你做什么,你最终都会在你的__construct周围出现一个肮脏的解决方案。
  • 你现在正在构建你的类对象的一些实例,你需要为这些对象的数据提供一些不是来自模型的数据(可能是一种缓存),并且你有成千上万个这样的对象。但是每次构建这样的对象时,所有属性都是从模型中填充的。

事实上,如果你想基于对象相关模型来填充对象属性,你应该认为它是一个更一般的东西,也许暗示着其他对象,接口,工厂,几种方法。至少不是在构造中。

使用数组作为数组和属性的属性,让PHP引擎优化属性管理,我相信代码优化器会使用属性比使用字符串索引的数组更好。

+0

感谢您的解释Regilero :) – Alvaro

0

取决于你真的需要他们做的,但通常是数组将允许更容易的操作。

P.S .:它们被称为属性,而不是属性。

+0

以什么方式?你能举个例子吗? – Alvaro

0

如果你有很多属性使用数组。这样,您就可以使用电源的魔术方法,如:

public function __set($name, $value) 
    { 
     echo "Setting '$name' to '$value'\n"; 
     $this->data[$name] = $value; 
    } 

编号:http://www.php.net/manual/en/language.oop5.overloading.php#object.set

+0

我目前正在使用它们:) 那么,使用这个数组有什么意义,它与这些属性有什么优势? – Alvaro

+1

与你失去自动完成数组,你可以在proprities名称上出错 – dynamic