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

atributo en clase

Estas en el tema de atributo en clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo una duda, es posible acceder a un atributo de una clase sin inicializar esta... por ejemplo... Código PHP: class  MiClase {    public  $atributo1  ...
  #1 (permalink)  
Antiguo 15/08/2008, 11:25
 
Fecha de Ingreso: enero-2008
Mensajes: 115
Antigüedad: 16 años, 3 meses
Puntos: 1
Exclamación atributo en clase

Hola, tengo una duda, es posible acceder a un atributo de una clase sin inicializar esta... por ejemplo...

Código PHP:
class MiClase
{
   public 
$atributo1 "hola";
   public 
$atributo2" a todos";

entonces... si yo pongo:
$clase = new MiClase();
echo $clase->atributo1;

hasta ahí todo bien... pero lo que yo kiero es poder imprimir el valor del atributo 'atributo1' sin necesidad de inicializar la clase,

es posible???... alguna idea de como hacerlo... saludos!!!
  #2 (permalink)  
Antiguo 15/08/2008, 11:31
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: atributo en clase

Si, es posible. Me parece que es de la siguiente forma:
Código PHP:
$variable MiClase::atributo1
  #3 (permalink)  
Antiguo 15/08/2008, 11:39
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: atributo en clase

Lo siento, me equivoque. Esto es de la documentacion de PHP 5
Cita:
El alcance del operador de resolución (también llamado Paamayim Nekudotayim) o en términos simples, dobles dos puntos, es un símbolo que permite acceso a los miembros o métodos estaticos, constantes, y eliminados de una clase.

Cuando se referencían estos elementos desde afuera de la definición de la clase, usan el nombre de la clase.
  #4 (permalink)  
Antiguo 15/08/2008, 11:42
Avatar de julianmejio  
Fecha de Ingreso: agosto-2005
Ubicación: Medellín, Antioquia
Mensajes: 88
Antigüedad: 18 años, 8 meses
Puntos: 3
Respuesta: atributo en clase

Correcto, pero este comportamiento es propio de una constante, y te queda mejor implementado si lo usas así:

Código PHP:

class MiClase
{
    const 
variable1 valor;
}

$constante MiClase::variable1

Ya si quieres que ese valor sea dinámico (los valores de constantes no se pueden modificar) puedes hacer con una función que retorne dicho valor:

Código PHP:

class MiClase
{
    public static function 
variable1()
    {
        
// Código de la función
    
}
}

$valor MiClase::variable1(); 

el operador "::" se utiliza para acceder a miembros constantes y estáticos sin necesidad de instanciar la clase.
  #5 (permalink)  
Antiguo 15/08/2008, 11:48
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: atributo en clase

Tambien esto es Valido:

Código PHP:
class MiClase{
    public static 
$variable1 valor;
}

echo 
MiClase::$variable1
Te recomiendo que leas la documentacion de PHP bajo el titulo de: "La palabra reservada 'Static' ". y "Alcance del operador de resolución (::)
", para que salgas mejor de tus dudas.
  #6 (permalink)  
Antiguo 15/08/2008, 11:53
 
Fecha de Ingreso: enero-2008
Mensajes: 115
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: atributo en clase

gracias a los DOS por su rápida respuesta...

'julianmejio' me funcionó lo que me dijiste... gracias :)

saludos!!!!
  #7 (permalink)  
Antiguo 15/08/2008, 11:57
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: atributo en clase

Pero ojo! estas llamando clase al objeto instanciado. Lo mas correcto seria hacer algo así:

Código PHP:
class MiClase 

   public 
$atributo1 "hola"
   public 
$atributo2" a todos"

   public function 
getAtributo1(){
      return 
$atributo1;
   }

   public function 
getAtributo2(){
      return 
$atributo2;
   }


Y a esos puedes acceder como

Código PHP:

$objeto 
= new MiClase();
echo 
$objeto->getAtributo1(); 
__________________
Saludoss
Guille
  #8 (permalink)  
Antiguo 15/08/2008, 12:07
 
Fecha de Ingreso: enero-2008
Mensajes: 115
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: atributo en clase

lo de constante era lo q necesitaba, lo q tú me dices es inicializar la clase y eso era justo lo que quería evitar...

muchas gracias a todos!!!!!!!
  #9 (permalink)  
Antiguo 15/08/2008, 12:52
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: atributo en clase

Ya que nadie preguntó: ¿cual es el contexto y por qué tu objeto necesita hacer esto? (más allá de la sintaxis)
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 28/08/2008, 14:15
 
Fecha de Ingreso: enero-2008
Mensajes: 115
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: atributo en clase

enrique... mil disculpas... no me di cuenta que habia otra respuesta al post...

no sé si recuerdas un post que puse... donde estoy elaborando una especia de mini framework... y bueno... keria darle al Controlador un atributo que defina su accion por defecto... era básicamente para eso... te parece que esté bien planteado?
  #11 (permalink)  
Antiguo 29/08/2008, 07:04
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: atributo en clase

Tendría que ver todo el contexto (o un poco más).

Por lo pronto intenta eliminar las variables públicas, están prohibidas
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #12 (permalink)  
Antiguo 30/08/2008, 17:10
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: atributo en clase

Exacto como dice Enrique (Voy a ver cuando me puedo anotar a un curso tuyo Enrique), los atributos siempre deben ser privados por seguridad...
  #13 (permalink)  
Antiguo 30/08/2008, 19:24
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: atributo en clase

Cita:
Iniciado por portalmana Ver Mensaje
Exacto como dice Enrique (Voy a ver cuando me puedo anotar a un curso tuyo Enrique), los atributos siempre deben ser privados por seguridad...
Cito la explicación de wikipedia que es bastante clara:

"Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos."

PD: gracias por los comentarios
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #14 (permalink)  
Antiguo 30/08/2008, 19:33
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: atributo en clase

Una consultita ese principio de ocultacion es el mismo que encapsulamiento o existe alguna diferencia. Gracias nos vemos
  #15 (permalink)  
Antiguo 30/08/2008, 20:55
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
Respuesta: atributo en clase

Si ves el link que dejo enrique: http://es.wikipedia.org/wiki/POO, puedes ver que habla de dos cosas diferentes.

Saludos.
  #16 (permalink)  
Antiguo 30/08/2008, 21:02
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: atributo en clase

Cita:
Iniciado por GatorV Ver Mensaje
Si ves el link que dejo enrique: link(no me deja porque no llego a los 30 mensajes) puedes ver que habla de dos cosas diferentes.

Saludos.
Gracias GatorV

Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Bueno por lo menos no soy el unico,,,,
Saludos y muy bueno el foro
  #17 (permalink)  
Antiguo 31/08/2008, 11:19
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Respuesta: atributo en clase

Cita:
Iniciado por portalmana Ver Mensaje
Una consultita ese principio de ocultacion es el mismo que encapsulamiento o existe alguna diferencia. Gracias nos vemos
Hola Portalmana !

Te voy a dejar un fragmento de texto de un libro que se llama Design Patterns Explained: A New Perspective on Object-Oriented Design donde explican el encapsulamiento de una forma genial.

------------------------------------------------------------------------------------------

Encapsulamiento: la forma tradicional de verlo y la nueva forma de verlo

Mi paraguas orientado a objetos

En mi clases de diseño de orientado a objetos, frecuentemente pregunto a mis estudiantes, “Quien ha escuchado que encapsulamiento es definido como ocultamiento de datos?”, casi todos levantan la mano.

Entonces procedo a contar una historia de mi paraguas. Ten en mente que vivo en Seatle, la cual tiene una reputación de ser más húmedo de lo que es, pero es aún un lugar muy húmedo en otoño, invierno y primavera. Aquí los paraguas y abrigos son nuestros amigos personales!

Déjame contarte acerca de mi gran paraguas. Es bastante grande para cubrirme!, de hecho, 3 o 4 personas puedes cubrirse conmigo. Mientras estamos cubiertos, manteniéndonos alejados de la lluvia, puedo moverme de un lugar a otro. Tiene un sistema de sonido para mantenerme entretenido mientras me mantengo seco. Sorprendentemente, puede también acondicionar el aire para que este más caliente o más frío. Es un paraguas genial.

Mi paraguas es conveniente. Se queda ahí esperando por mi. Tiene ruedas para que no tenga que estarlo cargando. Ni siquiera lo tengo que empujar porque lo puede hacer por si mismo. Algunas veces, abriré la parte superior de mi paraguas para dejar pasar los rayos solares. (El porque del que este usando mi paraguas cuando esta asoleado afuera esta fuera de mi compresión).

En Seatle, hay cientos de miles de paraguas de todos colores.

La mayoría de las personas les llama autos.

Pero pienso en el mío como un paraguas porque un paraguas es algo usado para mantenernos fuera de la lluvia. Muchas veces, mientras estoy esperando afuera por alguien para conocerlo, me siento en mi “paraguas” para mantenerme seco!

Las definiciones pueden limitarnos

Por supuesto que un carro no es realmente un paraguas. Si, puedes usarlo para mantenerte alejado de la lluvia, pero esa es una visión muy limitada de un auto. De la misma manera, el encapsulamiento es no solamente para el ocultamiento de datos. Esa es una visión muy limitada de encapsulamiento. Pensarlo de esa manera nos limita al hacer nuestros diseños.

¿ Como pensar acerca del encapsulamiento ?

Encapsulamiento debería ser enseñado como “cualquier tipo de ocultamiento”. En otras palabras, puede ocultar datos. Pero también puede ocultar implementaciones, clases derivadas o cualquier cantidad de cosas.

Considera el diagrama monstrado en la parte de abajo.

Multiples niveles de encapsulamiento



El diagrama muestra varios tipos de encapsulamiento:
  1. Encapsulamiento de datos – Los datos en Point, Line, Square y Circle están ocultos.
  2. Encapsulamiento de métodos – Por ejemplo, el método setLocation de Circle.
  3. Encapsulamiento de Subclases – Los clientes de Shape no ven Points, Lines, Squares o Circles.
  4. Encapsulamiento de otros objetos: Nadie más que Circle esta enterado de la existencia de xxCircle.

Un tipo de encapsulamiento es alcanzado cuando hay una clase abstracta que se comporta polifórmicamente sin que el cliente se entere de que tipo en concreto es el que está usando. Además, adaptando interfaces oculta lo que esta detrás del objeto adaptado.

La ventaja de esta nueva definición

La ventaja de ver el encapsulamiento de esta manera nos da una mejor manera de separar (descomponer) los programas. Las capas de encapsulamiento llegan a ser las interfaces que debo diseñar. Encapsulando varios tipos de Shapes, puedo añadir nuevos sin cambiar nada del programa del cliente que los usa. Encapsulando XXCircle detrás de Circle, puedo cambiar la implementación en un futuro si lo eligo o es necesario.

------------------------------------------------------------------------------------------

Este y otros temas los puedes encontrar en el capítulo 8 del libro.
Ojala te sea de ayuda.

Un saludote !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
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 02:48.