Duda sobre clases en PHP

suaveSHOW

Buenas, de vez en cuando me pongo a estudiar por mi cuenta programación y tengo una duda sobre las clases, es esta.

Suponiendo esta clase:

class Ejemplo {
private $this->variable;
public $this->variable2;

private function trincar() {
	return "hola".$this->variable;
}
public function trincar2() {
	return "hola".$variable;
}

}

Que diferencía hay entre usar en ese caso hipotetico $variable o $this->variable;

BLZKZ

this hace referencia al propio objeto, es una desambiguación que se usa en el caso de que haya atributos/variables con el mismo nombre.

this->nombre te asegura que esta usando el atributo nombre de la clase. Simplemente es eso

SkOi

por si pones
private function trincar($nombre)
{
$this->nombre = $nombre;
}

para diferenciar entre la global de la clase y la local del método

para todo lo demás.. #2

NeB1

#1 en tu ejemplo, si haces $variable, no estás accediendo al valor almacenado del miembro $this->variable

(o vamos, no debería, si me dices que funciona, me rompes xDD)

BLZKZ

#4 en php no lo he probado pero tanto en java como en c++ sí funcionaria si no se diera el caso que #3 o yo decimos

Thanat0s

public $this->variable2; <-- me han dolido los ojos cuando he visto eso.

No sé cuantas veces me lo han repetido diferentes profesores, pero sobre todo este año: "si usas un public en una variable de una clase, estás suspenso directamente"

Y respecto al tema.

El $this es para diferenciar entre atributos que te vienen por parámetro y aquellos que tienen el mismo nombre dentro de la clase.

Cuando no te entra ninguno por parámetro no hace falta poner el this, te reconoce automáticamente el de la clase.

NeB1

#5 en c++ nunca se me ha ocurrido hacer

class Complejo{
    private:
       double real;
       double imaginario;
    public:
       complejo(double real, double imaginario)...
}

siempre he hecho 

complejo(double r, double i) 

o sea, nunca he usado el nombre de los miembros para nombrar otra cosa :S enserio funciona también?

BLZKZ

#7 funcionar funciona xD sin warnings ni nada si bien es cierto nunca lo hago (lo recuerdo siempre como la primera norma de qué no hacer), yo sigo el convenio de empezar el nombre de cada atributo por guión bajo ( _ ) , variables locales empezarlas por minuscula, y globales en mayus

#6 +1, es algo que ya comente a LR hace menos de un mes en una duda de php también en este foro xD

NeB1

#8 es curioso, hago algo similar, pero solo en c#, no se porque no lo hago en el resto de lenguajes :S

#10 pozi

BLZKZ

#9 jaja pues yo lo hago siempre en todos, creo que es una buena costumbre xD

Usuarios habituales

  • BLZKZ
  • NeB1
  • Thanat0s
  • SkOi
  • suaveSHOW