Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类封装选项_Php_Oop - Fatal编程技术网

PHP类封装选项

PHP类封装选项,php,oop,Php,Oop,在最近的阅读中,我看到了关于封装方法和OOP最佳实践的相互矛盾的建议 我正在开始开发一系列PHP类,这些类将用于将数据从多个源系统传输和转换到最终目的地。因此,第一个类的属性将包含源URL和身份验证值 以下哪项最适合具有无限扩张潜力的长期项目 声明为公共财产。在构造类时为每个源外部设置值。赞成:简单。缺点:没有封装优势 使用“获取”和“设置”。为每个源外部设置值。赞成:遵循OOP惯例。Con:打开所有外部访问;同样,没有封装 将属性声明为受保护。对于我需要使用的每个源系统,扩展原始类并在子类中设

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

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

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

  • 声明为公共财产。在构造类时为每个源外部设置值。赞成:简单。缺点:没有封装优势

  • 使用“获取”和“设置”。为每个源外部设置值。赞成:遵循OOP惯例。Con:打开所有外部访问;同样,没有封装

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

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

    关于这个问题,我已经阅读了参考文献:


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

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


    工厂可以在启动时配置(这可能是一个加号),只有一类传输,用户只能以其选择的方式查看每个传输的状态(封装)。

    3。。。另外两种选择是垃圾。请记住,继承破坏了封装,因此您应该尽可能使用组合。+1有助于您将丰富的OO和可测试性知识提炼成一个简洁的答案,让接触有限的人能够理解。。。我太懒了:)谢谢你,乔恩。我将回到我对设计模式的研究中,并开始阅读有关依赖注入的内容。感谢你建议
    private
    避免“受保护的成员破坏我的封装”陷阱。谢谢你。我将阅读更多关于继承中的
    private
    protected
    的内容。