Подтвердить что ты не робот

Когда следует использовать статические методы в классе и какие преимущества?

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

Q: Статическая переменная в методе сохраняет значение даже тогда, когда метод выполняется, но доступен только в его методе, но как лучше всего определить статический метод?

Q: Является ли вызов статического метода без создания объекта этого класса, является единственным преимуществом статического метода?

Q: Каков доступный диапазон для статического метода?

Спасибо

4b9b3361

Ответ 1

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

Рассмотрим класс Math, который содержит некоторые общие значения, такие как Pi или e, и некоторые полезные функции, такие как sin и cos. На самом деле не имеет смысла создавать отдельные экземпляры для использования такого рода функций, поэтому они лучше, чем статика:

// This makes little sense
Math m = new Math();
float answer = m.sin(45);

// This would make more sense
float answer = Math.sin(45);

В языках OO (опять же, с точки зрения Java) функции или более известные как методы не могут иметь статические локальные переменные. Только классы могут иметь статические члены, которые, как я сказал, мало похожи по сравнению с идеей статического в C.

Ответ 2

Статические методы не передают указатель "this" на объект, поэтому они не могут ссылаться на нестатические переменные или методы, но, следовательно, могут быть более эффективными во время выполнения (меньшее количество параметров и никаких накладных расходов для создания и уничтожения объект).

Их можно использовать для группировки когезионных методов в один класс или для работы с объектами своего класса, например, в шаблоне factory.

Ответ 3

Синтаксис (php) для статических методов:

<?php
class Number {
    public static function multiply($a, $b) {
        return $a * $b;
    }
}
?>

Клиентский код:

echo Number::multiply(1, 2);

Что имеет больше смысла, чем:

$number = new Number();
echo $number->multiply(1, 2);

Поскольку метод multiply() не использует никаких переменных класса и как таковой не требует экземпляра Number.

Ответ 4

По существу, статические методы позволяют писать процедурный код на объектно-ориентированном языке. Он позволяет вам вызывать методы без необходимости создания объекта.

Ответ 5

Единственный раз, когда вы хотите использовать статический метод в классе, - это когда заданный метод не требует экземпляра класса, который должен быть создан. Это может быть при попытке вернуть общий источник данных (например, Singleton) или выполнить операцию, которая не изменяет внутреннее состояние объекта (например, String.format).

В этой записи в википедии очень хорошо объясняются статические методы: http://en.wikipedia.org/wiki/Method_(computer_science)#Static_methods

Ответ 7

Статические переменные и статические методы привязаны к классу, а не к экземпляру класса.

Статические методы не должны содержать "состояние". Все, что связано с состоянием, должно быть связано с экземпляром объекта, а не с классом.

Ответ 8

Статические методы в PHP:

Можно вызвать без создания объекта класса.

Можно вызвать только статические методы и функции.

Ответ 9

Статическая переменная используется, когда вы хотите поделиться некоторой информацией между разными объектами класса. Поскольку переменная является общей, каждый объект может ее обновить, а обновленное значение будет доступно для всех других объектов. Поскольку статическая переменная может быть разделена, их часто называют переменной класса.

Ответ 10

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

Статические элементы доступны в каждом экземпляре класса, поэтому вы можете установить значения, которые должны быть доступны всем членам типа.

для дальнейшего чтения ссылка!