2011-12-24 15 views
6

Tengo una clase con muchos métodos y variables en PHP. Cada vez que necesito un método para llamar a otro en la misma clase, tengo que agregar $this->. (!) Esto produce alguna fuente mal legibles, tales como:

$nextX = $this->calculateNextX($this->DX, $this->DY, $this->DZ); 
$nextY = $this->calculateNextY($this->DX, $this->DY, $this->DZ); 
$nextZ = $this->calculateNextZ($this->DX, $this->DY, $this->DZ); 
$this->X = $nextX; 
$this->Y = $nextY; 
$this->Z = $nextZ; 

¿Hay una manera de evitar $this-> en todas partes?

+3

Muy buen juego de palabras :) – Marlon

+0

¿Qué tal si cada método de cálculo modifica la propiedad respectiva? – BoltClock

+0

@BoltClock No siempre lo hará. Cada cálculo es reutilizable en otros lugares. Ya lo hice leer X, Y y Z para evitar pasar más de tres variables. – fernacolo

Respuesta

6

No, no es posible evitar esa construcción con la noción de POO incorporada de PHP.

PHP, como JavaScript, Python y Perl - pero a diferencia de Java y no siempre como Ruby - siempre requiere de un receptor explícito - o, $this para la "instancia actual" - a los miembros de acceso. La sintaxis es solo la forma que PHP usa para denotar este constructo y probablemente fue fuertemente influenciado por "ser un recién llegado" al lenguaje y tener que encajarlo. También es una reminiscencia de la sintaxis Perl/C.

Aunque la ubicación puede ser alterada o el número de sitios puede ser reducible, al final del día, que es el método de acceso a los miembros.

Happy coding.

+0

Feliz codificación y feliz navidad :) – NikiC

0

Se puede establecer que a otra cosa

$a = $this; 
$a->stuff(); 

Incluso en C++ yo prefiero usar this aunque para mayor claridad que está actuando en un miembro de la clase. Sin embargo, no es opcional en PHP.

2

Usted puede hacer esto en cada método

extract(get_object_vars($this)); 

Aunque eso sólo le permiten obtener las variables, no los métodos, ni propiedades estáticas. Y no serían referencias, por lo que solo son útiles para leer.

+0

Me salvaste un php rant. – clankill3r

Cuestiones relacionadas