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

Dudas con atributo static

Estas en el tema de Dudas con atributo static en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo la duda de cuando se debe o tiene que usar el atributo como static. Algun ejemplo real y tipico sería ideal. saludos y ...
  #1 (permalink)  
Antiguo 05/02/2007, 23:17
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Dudas con atributo static

Hola, tengo la duda de cuando se debe o tiene que usar el atributo como static.

Algun ejemplo real y tipico sería ideal.

saludos y gracias.
  #2 (permalink)  
Antiguo 06/02/2007, 08:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Dudas con atributo static

Un miembro estatico es eso, estatico entre todas las instancias de una clase, no importa cuantas instancias de una clase existan, ese valor continuara siendo estatico.

Un ejemplo:
Código PHP:
class algo {
      public static 
$valor;

      public function 
hazalgo($val) {
             echo 
self::$valor "=" $val;
      }

Código PHP:
algo::$valor "Uno";
$obj1 = new algo();
$obj2 = new algo();
$obj3 = new algo();

$obj1->hazalgo"a" );
$obj3->hazalgo"b" );
$obj3->hazalgo"c" );

algo::$valor "Dos";

$obj1->hazalgo"a" );
$obj3->hazalgo"b" );
$obj3->hazalgo"c" ); 
Deberas de ver algo asi:
Código:
Uno=a
Uno=b
Uno=c
Dos=a
Dos=b
Dos=c
  #3 (permalink)  
Antiguo 06/02/2007, 13:36
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Re: Dudas con atributo static

El ejemplo más típico que usaría para explicarlo (como si fuera un curso) es cuando tienes una clase "Cliente" y los atributos "id" y "ultimoId".

El primer atributo es de instancia, lo cual significa que cuando creas la instancia a partir de la clase este será su "entorno de trabajo" (no se me ocurrió otra mejor expresión).

Código PHP:
$unClienteBueno = new Cliente();
$unClienteMalo = new Cliente(); 
El atributo "id" es propio (único) para cada una de esas instancias, pero comparten el "diseño fundamental" por venir del mismo "modelo base" (la Clase). No se ven entre ellos, no se comparten entre objetos del mismo tipo.

Pero si tu creas un "ultimoId" estático, este atributo se compartirá con todas las instancias de la misma clase.

Nota: prefiero usar el termino "atributo de clase" que es más claro que decir "estático".

Si le aplicas la siguiente lógica verás su utilidad:

Código PHP:
<?php
class Cliente{
    static 
$ultimoId 0;
    private 
$id;

    public function 
__construct(){
        
$this->id = ++self::$ultimoId;
    }
    public function 
__toString(){
        return 
" ".$this->id;
    }
}

$unClienteBueno = new Cliente();
$unClienteMalo = new Cliente();

echo  
$unClienteBueno$unClienteMalo;

?>
Nota importante: hay que tener en cuenta que en PHP, como en todos los lenguajes de scripting web, una vez terminado de ejecutar, desaparecen todos los datos, objetos, etc, y si vuelves a iniciar la página todo inicia otra vez de cero.

La forma de mantenerlo es persistir de alguna manera la información, pero eso ya escapa a la pregunta original.

Referencias sobre la persistencia y el entorno "stateless" en este mismo foro:
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 06/02/2007, 15:01
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Dudas con atributo static

Gracias por las respuestas, resolvió mi duda.

saludos.
  #5 (permalink)  
Antiguo 08/02/2007, 10:16
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: Dudas con atributo static

disuclpen una duda esto de aqui para que sirve:

$this->id = ++self::$ultimoId;

Esa palabra ++self, no lo entiendo, gracias por sus respuestas
__________________
Software a Medida
voip Locutorios
  #6 (permalink)  
Antiguo 08/02/2007, 10:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Dudas con atributo static

Hola miguelichenco,

El operador ++, sirve para incremnentar un valor:
Código PHP:
$i 0;
echo 
$i// 0
++$i;
echo 
$i// 1 
El keyword self, sirve para hacer referencia a la misma clase, y te sirve para accesar a sus metodos estaticos, en idea es un apuntador al nombre de la clase. Por lo que esto es igual (solo si se llama dentro de la clase):
Código PHP:
class demo {
      private static 
$ultimoId;
      public function 
test() {
            
demo::$ultimoId 0;
            
self::$ultimoId 0;
      }

Como puedes ver, self, es la version de $this, pero en un contexto estatico. Saludos!
  #7 (permalink)  
Antiguo 08/02/2007, 11:05
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
Re: Dudas con atributo static

muchas gracias gatorV ya entendi finalmente, un saludo
__________________
Software a Medida
voip Locutorios
  #8 (permalink)  
Antiguo 04/10/2007, 03:10
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Dudas con atributo static

Me sirvió mucho esta explicación.

Como apunte para futuros lectores, para acceder a este atributo desde fuera de la clase, además de asignarle public hay que hacerlo de la misma manera que accederiamos a un método estatico de esa clase::
Código:
echo Cliente::$ultimoID;
Es importante el dollar $
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 09:40.