2014-02-13 1 views
2

Предполагая, что мне нужно создать класс, который требует некоторого текста, обработать и вернуть его ... без зависимости, и это класс без гражданства.В чем разница между классом без сохранения и пустым конструктором и классом Static?

Я хотел бы знать, было бы лучше создать безгражданство класс без конструкторы или просто создать статический класс (в 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; 
    } 
} 

Я знаю, что зависимость инъекций в класс, где эти классы используются бы лучше, но предположим, что я просто не будет иметь зависимость инъекций ..

Мой вопрос заключается в основном это было бы лучше создать статический класс для простой пример выше?

+1

Вопрос скорее в том, почему у вас будет класс без какого-либо состояния. Это не класс, это контейнер функций ... – EricSchaefer

+2

Должен прочитать: http://r.je/static-methods-bad-practice.html – Yang

+0

В чем разница между «защищенной статической функцией» и «защищенной функцией»? Ну, в статических методах нет никакого полиморфного поведения, и вот оно – Yang

ответ

1

Практически вы не увидите никакой разницы.

Только в синтаксисе и способности конструктора выполнять материал автоматически, хотя вам все равно придется создавать экземпляры для вызова конструктора, который в этом случае не за горами вызывает некоторую эквивалентную функцию-член static.

Однако, не- static функции-члены должен влиять внутреннее состояние так, если у вас нет состояния, static функции-члены кажутся более традиционными, и будет немного менее удивительным для пользователей класса.

Лучший подход, однако, состоит в том, чтобы придерживаться ваших функций в пространстве имен. Классы предназначены для данных и функций, работающих с этими данными ... даже static.

+0

Нет никакой разницы между глобальным состоянием и 'Class :: functionNamspace' – Yang

+0

@djay: The. ОП. Имеет. № государства. –

Смежные вопросы