Pregunta

Tengo concepto de variables estáticas pero ¿cuáles son los beneficios de los métodos estáticos en una clase. He trabajado en algunos proyectos pero no hacer un método estático. Cada vez que necesito para llamar a un método de una clase, se crea un objeto de esa clase y llamo el método deseado.

Q: Variable estática en un método sostiene su valor incluso cuando se ejecute el método, pero accesible sólo en su método que contiene, pero ¿cuál es la mejor definición del método estático?

Q: es una llamada al método estático sin crear objeto de esa clase es el único beneficio de método estático?

Q: ¿Cuál es el rango accesible para método estático?

Gracias

¿Fue útil?

Solución

Su descripción de una variable estática es más apropiado a la encontrada en C. El concepto de una variable estática en términos orientada a objetos es conceptualmente diferente. Estoy Basándose en la experiencia de Java aquí. métodos y campos estáticos son útiles cuando conceptualmente no pertenecen a una instancia de algo.

Considere una clase de matemáticas que contiene algunos valores comunes como Pi o correo, y algunas funciones útiles, como seno y coseno. Realmente no tiene sentido para crear instancias separadas para utilizar este tipo de funcionalidad, por lo que son mejor como la estática:

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

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

En lenguajes orientados a objetos (de nuevo, desde una perspectiva Java) funciones, o mejor conocido como métodos, no puede tener variables locales estáticas. Sólo las clases pueden tener los miembros estáticos, que como he dicho, se parecen poco en comparación con la idea de estática en C

Otros consejos

Los métodos estáticos no pasan un puntero "this" a un objeto, por lo que no pueden hacer referencia a variables o métodos no estáticos, pero en consecuencia, puede ser más eficiente en tiempo de ejecución (menos parámetros y ninguna sobrecarga de crear y destruir una objeto).

Se pueden utilizar con los métodos cohesivos de grupo en una sola clase, o para actuar sobre los objetos de su clase, como en el patrón de fábrica.

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

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

El código de cliente:

echo Number::multiply(1, 2);

¿Qué tiene más sentido que:

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

Como el método multiply() no utiliza ningún variables de clase y como tal no requiere una instancia de Number.

En esencia, los métodos estáticos permiten escribir código de procedimientos en un lenguaje orientado a objetos. Se le permite llamar a métodos sin tener que crear un objeto en primer lugar.

La única vez que desee utilizar un método estático en una clase es cuando un determinado método no requiere una instancia de una clase que se creará. Esto podría ser cuando se trata de devolver un origen de datos compartido (por ejemplo, un Singleton) o la realización de una operación que no modifica el estado interno del objeto (String.Format por ejemplo).

Esta entrada de Wikipedia explica los métodos estáticos bastante bien: http: //en.wikipedia. org / wiki / Method_ (computer_science) #Static_methods

Las variables estáticas y métodos estáticos se unen a la clase, y no una instancia de la clase.

Los métodos estáticos no deben contener un "estado". Todo lo relacionado con un estado, debe estar unido a un objeto instanciado, y no a la clase.

Un uso común de los métodos estáticos es en el lenguaje constructor llamado. Ver: http://www.parashift.com/c++- faq-lite / ctors.html # faq-10.8 .

métodos estáticos en PHP :

Se puede llamar sin crear un objeto de clase.

Sólo se puede recurrir a métodos y funciones estáticas.

Variable estática se utiliza cuando se desea compartir algo de información entre los diferentes objetos de la variable class.As se comparte cada objeto puede actualizarlo y el valor actualizado estará disponible para todos los demás objetos. Como variable estática puede ser compartida, estas son a menudo llamados como variable de clase.

elementos estáticos son accesibles desde cualquier contexto (es decir, cualquier parte del script), para que pueda acceder a estos métodos, sin necesidad de pasar una instancia de la clase de objeto a objeto.

Los elementos estáticos están disponibles en todas las instancias de una clase, lo que puede establecer valores que desea que esté disponible para todos los miembros de un tipo.

un enlace !

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top