PHP类封装选项

标签 php oop

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

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

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

  1. 声明为公共(public)属性。构造类时在外部为每个源设置值。优点:简单。缺点:没有封装优势

  2. 使用 __get 和 __set。为每个源设置外部值。优点:遵循 OOP 约定。缺点:全部开放给外部访问;再次声明,没有封装

  3. 将属性声明为 protected 。对于我需要使用的每个源系统,扩展原始类并在子类中设置属性。 Pro:OOP 与封装。缺点:需要管理更多类,可能还有文件。

目前,选项 3 似乎是最好的,尽管文件开销很大。我也乐于接受其他想法。

关于这个问题我读过的引用资料:

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

Getter and Setter?

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

Independent getter/setter methods, or combined?

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

Is it worth making get and set methods in OOP?

最佳答案

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

工厂可以在启动时配置(这可能是一个加号),只有一种传输类型,消费者只能以它选择公开它的方式(封装)查看每个传输的状态。

关于PHP类封装选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203485/

相关文章:

php - Mysql搜索设计

php - 无法使用 PHP 运行 shell 脚本文件

php - 如何使我的删除查询完全正常工作?

php - $this 在 PHP 中是什么意思?

c++ - '{' token c++ 继承问题之前的另一个预期类名

php - php 类中的 Medoo 对象

php - Laravel 中的 robots.txt

oop - 带有延迟函数和 non_overridable 关键字的段错误

c++ - 从另一个类调用另一个类的函数