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

Es necesario usar $this->X ?

Estas en el tema de Es necesario usar $this->X ? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Me preguntaba si en PHP OO es necesario usar la sintaxis de $this para acceder a las variables de clase o si es simplemente ...
  #1 (permalink)  
Antiguo 20/09/2011, 03:39
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Es necesario usar $this->X ?

Buenas,

Me preguntaba si en PHP OO es necesario usar la sintaxis de $this para acceder a las variables de clase o si es simplemente un tipo de aclaración a la hora de leer el código.

Sería esto correcto?

Código PHP:
class mundo(){
    private 
$nombre;

    public function 
setNombre($texto){
       
$nombre $texto;
    }

    public function 
getNombre(){
        return 
$nombre;
    }

  #2 (permalink)  
Antiguo 20/09/2011, 04:22
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Es necesario usar $this->X ?

Buenas, no tienes más que probarlo:

Código PHP:
Ver original
  1. class Mundo {
  2.     private $nombre;
  3.  
  4.     public function setNombre($texto){
  5.        $nombre = $texto;
  6.     }
  7.  
  8.     public function getNombre(){
  9.         return $nombre;
  10.     }
  11. }
  12. $mundo = new Mundo();
  13. $mundo->setNombre("Hola Mundo");
  14. echo $mundo->getNombre();

Te va a devolver el siguiente error:
Cita:
Notice: Undefined variable: nombre in C:\xampp\htdocs\BugTracker\index.php on line 9
Resultado: Si que es obligatorio.
Explicación: Date cuenta que PHP es un lenguage no tipado en el que las variables se pueden utilizar sin declarar de una forma especial. En este código lo que está pasando es que la función setNombre está creando una variable $nombre con visibilidad únicamente dentro del código de dicha función. Ahí no hay ningún problema, eso lo puedes hacer perfectamente. Pero cuando en otra función (getNombre) intentas hacer el return de $nombre, resulta que este nombre no es el atributo de la clase, sino que lo toma también como variable local del método y, como no existe, te devuelve ese error.

Espero que quede claro. Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 20/09/2011, 05:43
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Es necesario usar $this->X ?

Pero si usas global si funciona...................

(xDD)

Código PHP:
  class Mundo {
        private 
$nombre;
     
        public function 
setNombre($texto){
           global 
$nombre;
            
$nombre $texto;
        }
     
        public function 
getNombre(){
            global 
$nombre;
            return 
$nombre;
        }
    }
    
$mundo = new Mundo();
    
$mundo->setNombre("Hola Mundo");
    echo 
$mundo->getNombre(); 
__________________
>> Eleazan's Source
>> @Eleazan
  #4 (permalink)  
Antiguo 20/09/2011, 05:52
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Es necesario usar $this->X ?

$this te indica que es una instancia de la clase por lo tanto te permite acceder a los métodos y atributos de la clase, usar global en una clase no es correcto, para eso puedes hacer uso de la misma instancia es decir $this. Saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 20/09/2011, 06:02
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Es necesario usar $this->X ?

Cita:
Iniciado por carlos_belisario Ver Mensaje
$this te indica que es una instancia de la clase por lo tanto te permite acceder a los métodos y atributos de la clase, usar global en una clase no es correcto, para eso puedes hacer uso de la misma instancia es decir $this. Saludos
Nunca he dicho q fuera correcto
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 20/09/2011, 06:09
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Es necesario usar $this->X ?

El problema de utilizar global es que te cargas el concepto de OO:

Código PHP:
Ver original
  1. $nombre = "Hola amigo";
  2. echo $nombre;
  3. class Mundo {
  4.    private $nombre;
  5.  
  6.    public function setNombre($texto){
  7.       global $nombre;
  8.       $nombre = $texto;
  9.    }
  10.  
  11.    public function getNombre(){
  12.       global $nombre;
  13.       return $nombre;
  14.    }
  15. }
  16. $mundo = new Mundo();
  17. $mundo->setNombre("Hola Mundo");
  18. echo $mundo->getNombre();
  19. echo $nombre;

Si haces esto, tu salida será:
Hola, amigo
Hola Mundo
Hola Mundo

Utilizando global, estás accediendo a la variable más externa del código. Puede que esta variable sea la de tu clase, pero puede que no y te estés cargando la idea de orientado a objetos, modificando desde una clase una variable que ni si quiera pertenece a la clase.

Resultado: es obligatorio utilizar $this.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #7 (permalink)  
Antiguo 20/09/2011, 06:13
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Es necesario usar $this->X ?

Touché!

Buena respuesta !
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 20/09/2011, 06:32
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Es necesario usar $this->X ?

Que tal IMAC/,

Has leído la documentación al respecto ?, recuerda que no estas en JAVA :P.

@Eleazan, es bueno aclarar cuando un ejemplo es con fines puramente ilustrativos y mas cuando se hace uso de una muy mala practica.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 20/09/2011, 06:43
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Es necesario usar $this->X ?

Muchas gracias por las respuestas.

Entonces, por lo que estoy viendo también hay que usarlo para métodos...
Vaya. Esto hace que quede un poco más feo y complejo de leer el código.

Un saludo!
  #10 (permalink)  
Antiguo 20/09/2011, 07:24
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Es necesario usar $this->X ?

Cita:
Iniciado por IMAC/
Entonces, por lo que estoy viendo también hay que usarlo para métodos...
Vaya. Esto hace que quede un poco más feo y complejo de leer el código.
Ahhh, espera a que llegues a cosas como $frontController->store->clothes->getProducts($this->_category); veras que es mas divertido todavia!
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 20/09/2011, 09:48
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años
Puntos: 261
Respuesta: Es necesario usar $this->X ?

Cita:
Iniciado por IMAC/ Ver Mensaje
...
Vaya. Esto hace que quede un poco más feo y complejo de leer el código...
Terminas acostumbrándote
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #12 (permalink)  
Antiguo 20/09/2011, 17:48
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Es necesario usar $this->X ?

Cita:
Iniciado por masterpuppet Ver Mensaje
@Eleazan, es bueno aclarar cuando un ejemplo es con fines puramente ilustrativos y mas cuando se hace uso de una muy mala practica.
Totalmente de acuerdo.

Cita:
Iniciado por IMAC/ Ver Mensaje
Muchas gracias por las respuestas.

Entonces, por lo que estoy viendo también hay que usarlo para métodos...
Vaya. Esto hace que quede un poco más feo y complejo de leer el código.

Un saludo!
No me parece que sea más complejo. Antes te ayuda a saber que estás dentro de una clase

$this->propiedad
$this->metodo()

y te ayuda a diferenciar los parámetros de los métodos con las propiedades. Al final terminas entendiendo porqué es necesario $this y te acostumbras a este.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #13 (permalink)  
Antiguo 20/09/2011, 21:00
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Es necesario usar $this->X ?

lo primero que deberías de entender es el concepto de los objetos, muchos cuando comenzamos cometemos el error de querer lanzarnos al agua sin saber nadar, http://php.net/manual/es/language.oop5.php, la referencia oficial, solo queda de tu parte entender el porque de los objetos y el como se trabaja con ellos, despues vas a querer hacer todo con ellos XD, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: usar, variables
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 09:54.