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

duda con el uso del this

Estas en el tema de duda con el uso del this en el foro de Frameworks y PHP orientado a objetos en Foros del Web. pues bien mi duda es que cuando llamamos al this estamos haciendo referencia al objeto que esta instanciando la clase o a la clase es ...
  #1 (permalink)  
Antiguo 08/08/2008, 14:01
 
Fecha de Ingreso: agosto-2008
Mensajes: 18
Antigüedad: 15 años, 8 meses
Puntos: 0
duda con el uso del this

pues bien mi duda es que cuando llamamos al this estamos haciendo referencia al objeto que esta instanciando la clase o a la clase es decir este codigo

Código PHP:
class Empleado {
 private 
$nombre;
 private 
$edad;
public function 
__construct($nombre,$edad) {
 
$this->nombre $nombre;
 
$this->edad $edad;
 }
public function 
mostrarDatos() {
 echo 
"Nombre: ".$this->nombre."<br>";
 echo 
"Edad: ".$this->edad;
 }
}

$objeto = new Empleado("juancho",5000);
$objeto->mostrarDatos(); 
cuando invoco al this del metodo mostrarDato() a que estoy haciendo refencia a $objeto o a Empleado es decir funcionaria con algo como esto

echo "Nombre: ".$objeto->nombre; ?????
  #2 (permalink)  
Antiguo 08/08/2008, 14:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: duda con el uso del this

efectivamente....

$this es una supervariable interna en el contexto de alguna Clase/Objeto ... cuando se llama dentro de una clase hace referencia a si mismo (el objeto) y cuando lo haces desde afuera, no existe... asi que $objeto->nombre; es identico a $this->nombre (interno)

creo.... suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/08/2008, 14: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
Respuesta: duda con el uso del this

Cita:
Iniciado por vertrigo Ver Mensaje
pues bien mi duda es que cuando llamamos al this estamos haciendo referencia al objeto que esta instanciando la clase o a la clase es decir este codigo
$this es para referir a un elemento dentro de la instancia de la clase (objeto) que se está ejecutando.

Si no tienes una instancia (objeto) deberás usar en su lugar self para hacer el mismo efecto pero en referencia a elementos de la clase.

PD:
si mal no recuerdo, esta diferencia de nomenclatura se hace en PHP y -creo- en Java no se hace esta distinción.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 08/08/2008, 14:49
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: duda con el uso del this

Si existe en Java, pero es opcional, solo se usa cuando hay colisión de nombre de variables, por ejemplo:
Código:
public class Demo {
      private int aNumber;
      public Demo() {

      }

      public void setNumber( aNumber ) {
               this.aNumber = aNumber;
      }

      public void setNumberAlias( num ) {
               aNumber = num;
      }
}
Saludos.
  #5 (permalink)  
Antiguo 08/08/2008, 17:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 18
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: duda con el uso del this

entonces porque cuando modifico el código de la siguiente forma

Código PHP:
<?php

class Empleado {
 private 
$nombre;
 private 
$edad;
public function 
__construct($nombre,$edad) {
 
$objeto->nombre $nombre;
 
$objeto->edad $edad;
 }
public function 
mostrarDatos() {
 echo 
"Nombre: ".$objeto->nombre."<br>";
 echo 
"Edad: ".$objeto->edad;
 }
}

$objeto = new Empleado("juancho",5000);
$objeto->mostrarDatos();  

?>
No me imprime los datos "juancho", 5000 si no que lo deja en blanco ???
que deberia funcionar porque el this hace referencia a $objetos

Última edición por vertrigo; 08/08/2008 a las 17:33
  #6 (permalink)  
Antiguo 08/08/2008, 18:12
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: duda con el uso del this

Cita:
Iniciado por GatorV Ver Mensaje
Si existe en Java, pero es opcional, solo se usa cuando hay colisión de nombre de variables, por ejemplo:
No, clarísimo, de eso me acuerdo

Lo que yo decía era que la diferenciación de this y self no la hacía Java, ya que si haces algo con this es solo para instancia y si usas la clase directamente falla, y viceversa.

Lo del this opcional en Java me acuerdo, es más, yo lo usaba siempre, nunca opcional, por tema de claridad
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 08/08/2008, 18:16
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: duda con el uso del this

Cita:
Iniciado por vertrigo Ver Mensaje
entonces porque cuando modifico el código de la siguiente forma

Código PHP:
<?php

class Empleado {
 private 
$nombre;
 private 
$edad;
public function 
__construct($nombre,$edad) {
 
$objeto->nombre $nombre;
 
$objeto->edad $edad;
 }
public function 
mostrarDatos() {
 echo 
"Nombre: ".$objeto->nombre."<br>";
 echo 
"Edad: ".$objeto->edad;
 }
}

$objeto = new Empleado("juancho",5000);
$objeto->mostrarDatos();  

?>
No me imprime los datos "juancho", 5000 si no que lo deja en blanco ???
que deberia funcionar porque el this hace referencia a $objetos
No veo en que parte usas $this.

Saludos.
  #8 (permalink)  
Antiguo 08/08/2008, 18:20
 
Fecha de Ingreso: agosto-2008
Mensajes: 18
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: duda con el uso del this

Cita:
Iniciado por GatorV Ver Mensaje
No veo en que parte usas $this.
Saludos.
eso es a lo que me refiero si this hace referencia al objeto de igual manera deberia funcionar ese codigo
  #9 (permalink)  
Antiguo 08/08/2008, 19:11
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: duda con el uso del this

Fue un chiste, no?

Si, al "objeto" pero no literal.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 08/08/2008, 20:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 18
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: duda con el uso del this

Cita:
Iniciado por enriqueplace Ver Mensaje
Fue un chiste, no?

Si, al "objeto" pero no literal.
me creerán si les digo que aun tengo la duda si no existiese this ni self como se podria hacer el ejemplo anterior ?
  #11 (permalink)  
Antiguo 08/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: duda con el uso del this

Hola vertrigo,

Con PHP no puedes realizarlo, es forzoso usar $this, en otros lenguajes como java, es opcional.

Saludos.
  #12 (permalink)  
Antiguo 09/08/2008, 02:49
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda con el uso del this

Cita:
Iniciado por enriqueplace Ver Mensaje
y -creo- en Java no se hace esta distinción.
En Java es:
- Para hacer referencia a un atributo del objeto, usas this.atributo (o this.metodo()). En caso de que no haya posibilidad de colisión de nombres puedes ahorrarte el this y usar atributo o metodo() directamente.

- Para hacer referencia a atributos estáticos (de la clase) lo mismo pero con el nombre de la clase. Es decir, si no hay colisión sin nada. Si hay posibilidad de colisión, entonces pones MiClase.atributo. No hay necesidad de una palabra reservada.

Código:
class MiClase {
    static int atributo1;
    int atributo2;
    public metodo(int atributo1, int atributo2) {
        MiClase.atributo1 = atributo1;
        this.atributo2 = atributo2;
    }
}
Y perdón por el offtopic
  #13 (permalink)  
Antiguo 09/08/2008, 09:33
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: duda con el uso del this

vertrigo, es facil de entender mira

cuando tu haces $obj=new Objeto(); estas creando una instancia de la clase y en ella $this es la referencia del mismo dentro del objeto, ademas necesariamente para usar new vas a necesitar la funcion constructora ya sea utilizando __construct() o el mismo nombre de la calse en una funcion, ahora si tu usas
$obj=Objeto::algunMetodo(); ahora no estas creando ninguna instancia, es como si el Objeto::algunMetodo() fuera una simple funcion, y como no se creo la isntancia dentro del objeto no existe $this y la unica forma de moverse dentro es usando self o el mismo nombre de la clase

Código PHP:
class A  {
public 
unavariable='';
public function 
__construct(){$this->unavariable='inicializado en constructor';}
public static function 
algunMetodo(){self::$unavariable='inicializado en algunmetodo';}
public function 
mostrarDatos(){echo (isset($this))?$this->unavariable:self::$unavariable;}

entonces si tu haces

$o=new A(); //crea instancia y asigna valor
$o->mostrarDatos(); // imprime incializado en constructor

pero si tu haces

A::algunMetodo(); //asigna el valor
A::mostrarDatos(); //imprime inicializado en algunmetodo

espero se entienda un poco mejor
saludos
__________________
Degiovanni Emilio
developtus.com
  #14 (permalink)  
Antiguo 11/12/2008, 04:38
 
Fecha de Ingreso: diciembre-2008
Mensajes: 1
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: duda con el uso del this

Gracias por los datos me fue de mucha utilidad
  #15 (permalink)  
Antiguo 11/12/2008, 11:13
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Respuesta: duda con el uso del this

En Java también se puede acceder a atributos estáticos desde una referencia / instancia, aunque no es la buena idea (por una cuestión de claridad).
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 08:56.