1

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

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

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

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

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

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

无论哪种方式,在我看来,至少在 PHP 中,简单地加载静态并将其保存在内存中不是更高效吗?

4

1 回答 1

0

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

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

于 2020-09-04T22:34:26.123 回答