PHP类封装选项


PHP class encapsulation options

在最近的阅读中,我看到了关于封装方法和OOP最佳实践的相互矛盾的建议。

我正在开始开发一系列PHP类,这些类将用于将数据从多个源系统传输和转换到最终目的地。因此,第一个类的属性将包含源URL和身份验证值。

以下哪项最适合具有无限扩张潜力的长期项目?

  1. 声明为公共属性。构造类时,从外部为每个源设置值。Pro:简单。缺点:无封装优势

  2. 使用__get和__set。从外部为每个源设置值。Pro:遵循OOP惯例。Con:打开所有外部访问;同样,没有封装

  3. 将属性声明为受保护。对于我需要处理的每个源系统,扩展原始类并在子类中设置属性。Pro:OOP封装。缺点:需要管理更多的类,以及潜在的文件。

目前,选项3似乎是最好的,尽管有文件开销。我也对其他想法持开放态度。

我已经阅读了这个问题的参考文献:

http://typicalprogrammer.com/?p=23

Getter和Setter?

http://www.php.net/manual/en/language.oop5.overloading.php

独立的getter/setter方法,还是组合的?

http://martinfowler.com/bliki/GetterEradicator.html

在OOP中制作get和set方法值得吗?

至少还有一个选项:在构造时将这些参数注入对象中,并通过getter使它们成为只读的"属性"。只通过工厂构造对象(您也可以强制执行,但我不确定这样做是否有任何实际好处)。

工厂可以在启动时进行配置(这可能是一个优点),只有一类传输,消费者只能以其选择的方式查看每个传输的状态(封装)。

选择三,但实际上应该将它们设为私有。(请注意,除了您列出的三个选项之外,还有更多的选项,这不一定是最佳的,但我没有足够的信息来为您决定。)另外两个选项对于开发可扩展OOP应用程序都不是特别有用。