【问题标题】:What is the difference between Stateless class with empty constructor and Static class?具有空构造函数的无状态类和静态类有什么区别?
【发布时间】:2014-03-12 07:29:50
【问题描述】:

假设我必须创建一个类,它需要一些文本进行一些处理并返回它......没有依赖关系,它是一个无状态类..

我想知道创建一个没有构造函数的无状态类或者只创建一个静态类会更好(在 php 中它只是静态方法)

这样的类:

class ClassName
{
    public function processText($text)
    {
         // Some code
         $text = $this->moreProcessing($text);
         return $text;
    }

    protected function moreProcessing($text)
    {
        return $text;
    }
}

还有这个:

class ClassName
{
    public static function processText($text)
    {
         // Some code
         $text = static::moreProcessing($text);
         return $text;
    }

    protected static function moreProcessing($text)
    {
        return $text;
    }
}

我知道将依赖注入到使用这些类的类中会更好,但假设我不会进行依赖注入..

我的问题主要是为上面的简单示例创建静态类会更好吗?

【问题讨论】:

  • 问题是,为什么你会有一个没有任何状态的类。那不是类,是函数容器……
  • protected static functionprotected function 有什么区别?好吧,静态方法中没有多态行为,就是这样
  • @EricShaefer 你是对的,只是我不想在主要负责数据库操作的类中包含除了清理文本之外什么都不做的方法。

标签: php oop static-methods stateless


【解决方案1】:

实际上你不会发现任何区别。

这只是语法,以及构造函数自动执行任务的能力,尽管您仍然必须创建实例来调用构造函数,在这种情况下调用一些等效的 static 成员函数并不遥远。

但是,非static 成员函数应该影响内部状态,因此,如果您没有状态,static 成员函数似乎更传统,并且对用户来说不会那么令人惊讶类的。

不过,最好的方法是将您的函数粘贴在命名空间中。类用于数据和对该数据进行操作的函数……甚至是 static 的。

【讨论】:

  • 全局状态和Class::functionNamspace没有区别
  • @djay:那个。操作。已。没有。状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多