PHP orientado a objetos 7: Métodos y propiedades estáticos

Los métodos estáticos sirven para ejecutar instrucciones o emplear propiedades que no cambian el estado del objeto.

hiroshige

archivado en: PHP/AJAX / 23 marzo, 2013 / taller:

En esta entrada vamos a ver un tipo especial de métodos y propiedades denominados estáticos, que se caracterizan porque no se necesita crear una instancia, un objeto, para usarse, sino que pueden emplearse directamente con el operador Paamayim Nekudotayim —los cuatro puntos—, una expresión que dicha tres veces al revés mirando un espejo invoca un elefante violeta. Dicho de otra forma, sirven para definir métodos y propiedades cuyo comportamiento no depende de la creación de un objeto, de ahí que se conozcan como «elementos de clase».

Para declarar un método o propiedad estático hay que anteponer la palabra reservada static.

class nombreClase

{

public static function métodoEstatico () 

{

return "Hey, soy un método estático";

 }

}

echo nombreClase::métodoEstatico();

Se usan por ejemplo para pequeñas utilidades relacionadas con una cosa concreta, como acortar o reemplazar cadenas, generar números aleatorios... ,  en una historia que estoy preparando acabo de incluir un método estático, no muy ortodoxo, que genera un combo de selects a partir de un parámetro. Si le envío 24, por decir un número, prepara un combo de 24, cada uno con su valor correspondiente. Una chorrada que me sirve para formularios donde el usuario debe ingresar la hora o los minutos.

class Utilidades

{

public static function SelectId($contador2)

{

$mitad = round($contador2/2);

for ($contador = 0; $contador < $contador2; $contador++) { ?>

<option value='<?php echo $contador; ?>'

<?php if ($contador == $mitad) { ?> selected <?php } ?>

><?php echo $contador; ?></option>

<?php }

}

}

// ...

<select name="calendario_hora_final" id="calendario_hora_final" class="">

<?php Utilidades::SelectId(24);  ?>

</select><label for="calendario_hora_final"> Hora </label>||

<select name="calendario_minutos_final" id="calendario_minutos_final" class="">

<?php Utilidades::SelectId(60); ?>

</select> <label for="calendario_minutos_final"> Minutos </label>

Además, los métodos static se pueden utilizar dentro de una clase mediante la palabra reservada self y el Paamayim Nekudotayim, que es la manera correcta de hacerlo:

error_reporting(E_STRICT);

class nombreClase

{

public static $propiedadEstatica = "Hey, soy una propiedad estática";

public static function metodoEstatico() {

return "Hey, soy un método estático";

}

public function llamaEstaticas() {

// Esto está mal

return $this->propiedadEstatica;

// Esto está bien

return self::$propiedadEstatica;

// Esto está mal

return $this->metodoEstatico();

// Esto está bien

return self::metodoEstatico();

}

}

Nota: al principio he modificado los reportes de errores mediante la instrucción error_reporting(E_STRICT). Otro día explico esto con calma, pero de momento baste con indicar que sirve para que se muestre por pantalla cualquier tipo de error en el código. De esa manera, si alguien hace experimentos con los métodos estáticos podrá ver qué sucede.

Bueno, de momento vamos a dejarlo aquí, que estoy reventado de cansancio.

|| Tags: , ,

valoración de los lectores sobre PHP orientado a objetos 7: Métodos y propiedades estáticos

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración negativa
  • 3.7 sobre 5 (27 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

6 respuestas a “PHP orientado a objetos 7: Métodos y propiedades estáticos

  1. Declarar propiedades o métodos de clases como estáticos los hacen accesibles sin la necesidad de instanciar la clase. Una propiedad declarada como static no puede ser accedida con un objeto de clase instanciado (aunque un método estático sí lo puede hacer).

  2. marcos el dijo:

    Sí, gracias por el aporte Vince. Pensé que había quedado claro, pero no me debí explicar bien.

  3. ¿incluyendo html dentro de clases? una burrada atomica. Hacé eso en un proyecto grande y a ver como se arregla la gente de diseño para trabajar, si todo esta metido en php y métodos.

  4. Hola Diego, si estás haciendo un proyecto grande se supone que usas un frame del tipo Symphony, Zend o Codeigniter, por mencionar algún ejemplo, en los que las vistas están totalmente separadas de los controladores…

    Si, en cambio, estás escribiendo una entrada de un blog para explicar cómo funcionan los métodos estáticos en php, el tema carece de relevancia.

  5. Había leído 2 ó 3 textos explicando este tema de funciones y propiedades estáticas, y aún no me había quedado claro, pero aquí se me quitaron todas las dudas. Sencillo y al grano. Muchas gracias y buen trabajo.