php - PHP OOP 中的属性与属性数组

标签 php model-view-controller oop class

我想知道哪种方式更好。 在 Controller 类中使用私有(private)属性,或仅使用一个私有(private)属性作为属性数组。

而不是:

class User{

    private $id;
    private $firstName;
    private $surname;
    private $age;
    private $gender;
    private $city;
    ...
    ...
}


class User{

    private $data;
}

然后就可以做这样的事情:

function __construct(){
     //this would contain id, firstName, username, age, gender...
    $data = $model->getData();
}

谢谢

最佳答案

使用数组,您在类上编写代码时将失去任何自动完成工具。您将失去检测属性语法错误的能力。事实上,你会让你的代码更加困惑,缺乏描述性。

使用对象通常是一件好事,可以实现更好的可维护性,对于将与多个开发人员共享的东西,或者在编写几个月或几年后与自己共享的东西。在我看来,你应该保留属性。更困惑的代码可能会被“优化”,或者阅读起来更短,但如果您想要的话,只需编写汇编代码即可。如果你想编写目标代码,请以干净的方式进行,你总会找到一种可以挽救你 future 生活的情况。

您的问题是,您可能认为在对象属性和模型层列之间保持清晰的映射确实很痛苦。但无论您尝试什么,这是您在所有应用程序中始终必须编写的最少内容,如果这里没有完成,那么在使用对象时您仍然必须知道这些属性。这很可能是 Pattern of Failure :

Most of us developers embrace the Don’t Repeat Yourself/Duplication Is Evil principle, and we apply whenever we can to the software we create. But one of the deadliest pitfalls we can make is waving the wand of abstraction too quickly and too broadly, and we often forget that the consequence of unnecessary duplication is far less than the consequence of unnecessary consolidation.

通过您的 DataModel 加载示例,我可以看到两个潜在的 future 问题:

  • 让我们想象一下,将来您将拥有一个二进制属性,并且该属性需要延迟加载,无论您做什么,最终都会以 __construct 周围的肮脏解决方案结束。
  • 您现在正在构建类对象的一些实例,您需要向这些对象的数据提供一些不是来自模型的数据(可能是一种缓存),并且您有数千个这些对象。但是每次构建这样的对象时,所有属性都会从模型中填充。

事实上,如果你想基于对象相关模型来填充对象属性,你真的应该认为它是更通用的东西,可能意味着其他对象、接口(interface)、工厂、几种方法。至少在构造中不是这样。

对数组使用数组,对属性使用属性,让 PHP 引擎优化属性管理,我相信代码优化器使用属性会比使用字符串索引的数组做得更好。

关于php - PHP OOP 中的属性与属性数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118596/

相关文章:

Java重载和覆盖

java - 有没有办法确定Java类中的方法是否已被覆盖

javascript - 如何使用ajax将选定的(从多个)输入值发送到数据库?

Java SE框架和架构?

php - 使用 PHP 将制表符分隔的文本文件读入 MySQL 表

spring.view.prefix : not being applied to simple view name in Spring Boot

ios - 我的 appdelegate 可以用作 UIView Controller (MVC) 的 Controller 吗

java - 我应该在方法参数中还是在 Java 的父构造函数中传递对象

php - Mysql 表自己添加行

php - 使用像 CodeIgniter 或 CakePHP 这样的框架比使用 'plain vanilla' PHP 有什么优势?