我已经使用PHP开发了一段时间,但最近才转向面向对象编程的方法。
对我来说,经常出现的一个问题是:OOP应该走多远,特别是在执行速度和内存资源等方面。
例如,假设我有两个对象,用户(User)和列表(Listing)。
列表始终与单个用户关联。UserId是Listing的属性,因此我知道它所涉及的用户。
在Listing方法中,偶尔需要访问相关用户的单个属性。
就我所看到的(如果不是,请告诉我),我有三种选择来完成这个任务:
创建一个新的用户对象,并通过$user->theProperty访问相关属性。
将所需属性作为Listing的本地属性,并在初始化Listing时填充它(例如,通过SQL连接)。
直接查询数据库,通过用户ID检索所需的用户属性。
在我看来,选项1和2更严格地遵循OOP规则,但由于初始化整个对象只是为了检索1个属性,因此会影响性能。选项3将是最少内存的选项,但却完全绕过了OOP。
此外,在创建对象时填充对象的属性,我的大多数对象在初始化后不久就通过一个“填充(fill)”方法填充了它们的大部分属性(因此只需要1个DB查询)。通常会被认为是最佳实践,还是更建议使用单个方法获取这些属性,并在需要时填充它们?
我知道可能没有“正确”的答案,但是否有人可以给出关于如何处理这种情况的最佳建议?
非常感谢 Nick
$this->getUser()->getProperty()
这样访问它。虽然与此无关,但你可以看一下这个网址:http://martinfowler.com/eaaCatalog/singleTableInheritance.html && http://martinfowler.com/eaaCatalog/concreteTableInheritance.html - Hannes