Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clase estática en PHP

Estas en el tema de Clase estática en PHP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos. Estoy estudiando PHP y me surgen algunas dudas. Por ejemplo, no se cómo crear una clase estática. Una clase estática (según tengo ...
  #1 (permalink)  
Antiguo 17/09/2007, 13:11
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Clase estática en PHP

Hola a todos.

Estoy estudiando PHP y me surgen algunas dudas. Por ejemplo, no se cómo crear una clase estática. Una clase estática (según tengo entendido) es aquella que no necesita (y no puede) instanciarse ya que sus métodos (todos static) no se aplican a un objeto en particular. Un ejemplo de esto es la clase Math de ActionScript

Yo lo que quiero es crear una clase de utilidades que no tienen cabida en otras clases por separado y que no es plan dejarlas por ahí sueltas.

Bien, esta es mi clase:

Código PHP:
class Utils{
    public static function 
echoln($a){
        echo 
"{$a}<br />";
    }
    
/*
        Este método no debería estar,
        pues lo que quiero es una clase estática
    */
    
public function echoln0($a){
        echo 
"{$a}<br />";
    }

Pero me encuentro con varios problemas... y es que el siguiente código funciona perfectamente:

Código PHP:
Utils::echoln("Hello");
$o = new Utils();
$o -> echoln("Hello");
Utils::echoln0("Hola"); 
La sentencia de la primera línea es la que yo me esperaba que funcionase.
La segunda línea ya no me gusta, y es que puede crearse un objeto de la clase sin ningún problema... como no se puede aplicar static a la clase en sí, ¿cómo hago para que no se pueda instanciar? (1)
La tercera línea tampoco me gusta, pues al parecer se puede acceder a un método estático desde un objeto (a un miembro estático no, por ejemplo... eso ya me gusta más)
Y la terce línea... bueno, que me da la sensación de que un método estático y uno que no lo sea (¿dinámico, entonces?) son lo mismo.

Me gustaría que si alguien tiene tiempo y ganas me instruya sobre cómo hacer lo que pretendo (o cómo implementar lo que pretendo pero de otra forma, sin usar una clase estática), si es que es posible en PHP (y que se me corrija si lo que realmente pasa es que confundo conceptos)

(1) - Si defino el constructor de la clase como private, ya no es posible instanciarla (al menos no con el operador new)... pero la verdad es que no me gusta nada esa forma (porqué sí podría ser instanciada de otra manera, y porque el error que devuelve PHP al intentar instanciarla de la manera normal no me parece el adecuado a una clase estática)
  #2 (permalink)  
Antiguo 17/09/2007, 13:43
Avatar de vanetino  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima, Peru
Mensajes: 22
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Clase estática en PHP

Hola Sanva, para no instanciar tu clase solo tienes que hacer que sea abstracta, creo te servira para lo que quieres hacer.

algo asi:

abstract MiClase{

}


saludos

Vanetino
  #3 (permalink)  
Antiguo 17/09/2007, 14:29
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Clase estática en PHP

Pues tienes razón... funciona tal y como yo quería. Pero ahora se me presenta una nueva duda, ¿es correcto usar una clase abstracta para esta funcionalidad? Según tengo entendido, una clase abstracta se usa como modelo de otras clases, que deben derivar de ella (algo muy similar a una interface), mientras que aquí la estaría usando como sustituto a una clase estática (que parece que PHP no soporta)

¿Qué me decís?
  #4 (permalink)  
Antiguo 17/09/2007, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Clase estática en PHP

Deberias de activar E_STRICT para que veas los errores claros. Actualmente la version de PHP5 no muestra errores fatales en lo que intentas hacer, pero para PHP6 si estara mas cerrado esas opciones, de usar clases estaticas y metodos estaticos.

Saludos.
  #5 (permalink)  
Antiguo 17/09/2007, 14:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Clase estática en PHP

Asi es una clase abstracta sirve como modelo para las clases que la heredan, asi que mejor deberias de usar:
Código PHP:
class algo {
     public static function 
otracosa() {}

Como te comento si es posible crear la clase y usarla (ya que es parte de la clase) pero para versiones posteriores (PHP6) esto ya traera un error fatal.

Saludos.
  #6 (permalink)  
Antiguo 18/09/2007, 17:15
Avatar de diegoy2k  
Fecha de Ingreso: julio-2006
Ubicación: Algun Lugar
Mensajes: 68
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Clase estática en PHP

Que tal, en si lo que hace static, es que todas la instancias de una clase (Objetos), miren ( ojo, respetando encapsulamiento), al mismo elemento (objeto, variables ...).
Entonces suponganos que quiero hacer un (clase) contador, la variable que maneja el contador es estatica, si se crean X instancias todas modificaran a las misma variable ya que es unica.
  #7 (permalink)  
Antiguo 18/09/2007, 19:04
Avatar de demiurgo_daemon  
Fecha de Ingreso: diciembre-2006
Ubicación: Querétaro
Mensajes: 184
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Clase estática en PHP

Hola,

según entiendo del manual del PHP, ganas muy poco declarando un método estático, a diferencia de una variable estática, como dijo Sanva. Yo me iría por usar un Singleton (de todas formas, la mayor utilidad de una clase estática es implementar un Singleton de manera abreviada).

saludos
  #8 (permalink)  
Antiguo 19/09/2007, 02:16
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Clase estática en PHP

Cita:
(...)pero para versiones posteriores (PHP6) esto ya traera un error fatal.
Eso ya me va gustando más... entonces, por el momento, simplemente, lo pasaré por alto

Estoy deseando que salga PHP 6 (aunque bueno, luego tocará esperar a que los servidores compartidos se actualicen... yo ya seré viejo)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:28.