Pergunta

Tenho conceito de variáveis ​​estáticas, mas quais são os benefícios dos métodos estáticos em uma classe.Trabalhei em alguns projetos mas não tornei um método estático.Sempre que preciso chamar um método de uma classe, crio um objeto dessa classe e chamo o método desejado.

P: A variável estática em um método mantém seu valor mesmo quando o método é executado, mas acessível apenas no método que o contém, mas qual é a melhor definição de método estático?

P: Chamar o método estático sem criar o objeto dessa classe é o único benefício do método estático?

P: Qual é o intervalo acessível para o método estático?

Obrigado

Foi útil?

Solução

Sua descrição de uma variável estática é mais adequada à encontrada em C.O conceito de variável estática em termos de Orientação a Objetos é conceitualmente diferente.Estou aproveitando a experiência Java aqui.Métodos e campos estáticos são úteis quando conceitualmente não pertencem a uma instância de algo.

Considere uma classe Math que contém alguns valores comuns como Pi ou e, e algumas funções úteis como sin e cos.Realmente não faz sentido criar instâncias separadas para usar esse tipo de funcionalidade, portanto elas são melhores como estáticas:

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

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

Em linguagens OO (novamente, da perspectiva Java), funções, ou mais conhecidas como métodos, não podem ter variáveis ​​locais estáticas.Somente classes podem ter membros estáticos, o que, como já disse, pouco se assemelha à ideia de estático em C.

Outras dicas

Os métodos estáticos não passam um ponteiro "este" para um objeto, portanto, não podem fazer referência a variáveis ​​ou métodos não estáticos, mas podem, conseqüentemente, ser mais eficientes em tempo de execução (menos parâmetros e nenhuma sobrecarga para criar e destruir um objeto).

Eles podem ser usados ​​para agrupar métodos coesos em uma única classe ou para atuar sobre objetos de sua classe, como no padrão de fábrica.

Sintaxe (php) para métodos estáticos:

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

Código do cliente:

echo Number::multiply(1, 2);

O que faz mais sentido do que:

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

Enquanto o multiply() método não usa nenhuma variável de classe e, como tal, não requer uma instância de Number.

Essencialmente, os métodos estáticos permitem escrever código processual em uma linguagem orientada a objetos.Ele permite chamar métodos sem precisar criar um objeto primeiro.

A única vez que você deseja usar um método estático em uma classe é quando um determinado método não requer a criação de uma instância de uma classe.Isso pode ocorrer ao tentar retornar uma fonte de dados compartilhada (por exemplo, um Singleton) ou ao executar uma operação que não modifica o estado interno do objeto (String.format, por exemplo).

Esta entrada da Wikipedia explica muito bem os métodos estáticos: http://en.wikipedia.org/wiki/Method_(computer_science)#Static_methods

Variáveis ​​estáticas e métodos estáticos estão vinculados à classe, e não a uma instância da classe.

Os métodos estáticos não devem conter um “estado”.Qualquer coisa relacionada a um estado deve estar vinculada a um objeto instanciado, e não à classe.

Um uso comum de métodos estáticos está no idioma do construtor nomeado.Ver: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8.

Métodos estáticos em PHP:

Pode ser chamado sem criar um objeto de classe.

Só pode chamar métodos e funções estáticas.

A variável estática é usada quando você deseja compartilhar algumas informações entre diferentes objetos da classe. À medida que a variável é compartilhada, cada objeto pode atualizá-la e o valor atualizado estará disponível para todos os outros objetos também.Como variáveis ​​estáticas podem ser compartilhadas, elas são frequentemente chamadas de variáveis ​​de classe.

elementos estáticos são acessíveis a partir de qualquer contexto (ou seja,em qualquer lugar do seu script), para que você possa acessar esses métodos sem precisar passar uma instância da classe de objeto para objeto.

Os elementos estáticos estão disponíveis em todas as instâncias de uma classe, portanto, você pode definir valores que deseja que estejam disponíveis para todos os membros de um tipo.

para leitura adicional um link!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top