OOP最佳实践(特别是PHP)

Nic*_*ick 15 php oop

我已经用PHP开发了一段时间,但直到最近才转向OOP方法.

一个不断出现的问题是"与OOP的关系有多远",特别是在执行速度和内存资源等方面.

例如,假设我有2个对象,User和Listing

列表始终链接到单个用户.UserId是Listing的一个属性,所以我知道它与哪个用户有关.偶尔,在Listing方法中,我需要访问相关User的单个属性.

据我所知(如果没有,请告知)我有3个选项来完成此任务.

  1. 创建一个新的用户对象并通过$ user - > theProperty访问相关的属性

  2. 使得必需属性成为Listing的本地属性,并在初始化Listing时填充它(例如,通过sql join)

  3. 直接查询数据库以通过用户ID检索用户所需的属性

在我看来,选项1和2遵守OOP规则更严格,但由于初始化整个对象只是为了检索1个属性而具有性能命中.选项3将是内存密集程度最低但完全避开OOP.

此外,在创建时填充对象方面,我的大多数对象在初始化后不久就通过一个"填充"方法填充其大部分属性(因此只需要1个DB查询).这通常被认为是最佳实践,还是更可取的是使用单独的方法来获取这些属性,在需要时填充?

我意识到可能没有"正确"的答案,但是有人能就这种情况的最佳方法提出建议吗?

非常感谢尼克

Ren*_*gen 2

我绝对更喜欢选项 1。选项 2 不遵循 OOP 背后的思想,因为用户信息不是列表的一部分,因此将其保留在单独的对象中。

请记住以下规则:

  1. 立即加载一个没有其关系的对象。
  2. 如果您需要相关对象,请根据规则 1 在需要时加载它

许多 ORM 都是这样工作的,例如 Doctrine ( http://www.doctrine-project.org )。这称为延迟加载。

当您需要对象的一个​​属性时,您会发现自己在进一步加载同一对象的第二个属性。在许多情况下,您会发现自己在一个完整的脚本中仅针对一个对象执行大量数据库查询。