【问题标题】:Are DAO objects better than static DAO classes in PHP?DAO 对象是否比 PHP 中的静态 DAO 类更好?
【发布时间】:2014-11-20 00:12:01
【问题描述】:

我了解在 Java 中不使用静态的原因。

但是,我目前正在用 PHP 开发 OO 代码。我使用 DAO 的目的是将我的查询保存在一个地方,以便我可以轻松找到它们。我还实例化了一些 DAO,因此我可以将分页合并到一些(相关)查询中。在许多情况下,这不是必需的,因此我倾向于以以下形式创建静态方法(尽管从技术上讲,我认为我不能称其为 DAO):

$info = schemeDAO::someFunction($variable);

在页面刷新期间我可能只需要那个方法(即头文件中的特定值)。

在创建和销毁对象时,我可能需要实例化同一个 DAO 一百次。

 $dao = new myDao();
 $info = $dao->someFunction($variable);

无论如何,在我看来,至少在 PHP 中,简单地加载一个静态变量并将其保存在内存中不是更高效吗?

【问题讨论】:

  • 静态在Java中不好的原因是什么?在您看来,为什么同样的原因不适用于 PHP?为什么需要“将同一个 DAO 实例化一百次”?为什么你认为静力学效率更高?你认为这里的记忆是什么?
  • AFAIK 对象实际上比静态类更快。虽然不应该有破坏和创造的理由......
  • OO 方法、测试、应用程序内存等。“你认为这里的内存是什么?”我的假设,蓝图,班级结构。不需要访问静态函数类实例化。要访问方法,必须完整创建该类型的对象。由于 GC 将删除在停止引用时创建的任何 DAO 对象,如果另一个类使用相同的 dao 在其他地方再次实例化,在我看来,由于必须再次创建对象,因此会产生额外的开销?因此这个问题...... user247245 的链接给了我我想要的信息。谢谢
  • 当然,如果您不断地创建对象并让它们超出范围,那么重新创建它们显然会产生开销。但是,为什么不将对象实例化一次,然后将它们传递给所有使用它们的方法呢?见How Not To Kill Your Testability Using Statics

标签: php static-methods php-dao


【解决方案1】:

虽然静态访问是可以接受的(在一定程度上),但使用动态方法,您可以通过依赖项将对象传递到第三个侧面对象,(否则传递调用也必须从原始类),它不需要推送一些数据,而是依赖关系决定并拉取它需要的数据/方法,在一个方法中多次。否则它只能返回,而实例可以被调用,而不是从数据中分离包装方法逻辑。实例内联代码似乎更短,当您删除一个实例时,他们的所有调用都会在那个时候抱怨,而静态类继续在代码中保持不被注意,因为它们不需要实例化先决条件。 静态类在各种对象和方法上下文之间保留它们的状态,因此不会像使用“新构造”那样自动“重置”。实例鼓励更透明的纯函数方法——传递参数。当您传递一个对象时,您不会将服务逻辑与其数据结构分开,当您仅传递数组数据结构时,执行逻辑会在传输过程中丢失或分离到另一个地方,并且最终必须在不透明的情况下静态地调用 -通过 - 纯函数概念。

我会使用爱因斯坦方程与牛顿方程的比较。在某些情况下,它们看起来完全一样。但为了更满意,我会使用更通用的实例或服务定位器单例,而不是静态类。另一方面,较不“通用”的静态类最初可能更容易实现,特别是如果您不打算将它们带入火箭到太空轨道,因为您可能会得到实例。与私有属性类似,您可以发出信号,它们不会在任何地方传递,纯函数,尽管它可能不太经常发出坏信号,从任何地方调用。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2018-09-14
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多