2011-12-24 17 views
6

Mam klasy z wieloma metodami i zmiennymi w PHP. Za każdym razem, gdy potrzebuję metody wywoływania innej w tej samej klasie, muszę dodać $this->. (!) To daje trochę źle czytelnego źródła, takiego jak:

$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; 

Czy istnieje sposób, aby uniknąć $this-> wszędzie?

+3

Bardzo fajna gra słów :) – Marlon

+0

Co powiesz na to, że każda metoda obliczania modyfikuje odpowiednią właściwość? – BoltClock

+0

@BoltClock Nie zawsze to zrobi. Każde obliczenie można ponownie wykorzystać w innych miejscach. Zrobiłem już przeczytać X, Y i Z, aby uniknąć przekazywania kolejnych trzech zmiennych. – fernacolo

Odpowiedz

6

Nie, nie można tego uniknąć przy pomocy wbudowanego w PHP pojęcia OOP.

PHP, jak JavaScript, Python i Perl - ale w przeciwieństwie do Javy i nie zawsze jak Ruby - zawsze wymaga wyraźnej odbiornik - lub $this dla „bieżącej instancji” - członkom dostępu. Składnia jest po prostu formą, której PHP używa do oznaczenia tego konstruktu i prawdopodobnie był pod silnym wpływem "bycia spóźnionym" do języka i konieczności dopasowania go. Przypomina również składnię Perla/C.

Choć lokalizacja mogą być zmienione lub liczba miejsc może być sprowadzić na koniec dnia, że ​​jest metoda dostępu członków.

Szczęśliwe kodowanie.

+0

Szczęśliwe kodowanie i wesołych świąt :) – NikiC

0

Można ustawić go do czegoś innego

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

nawet w C++ wolę używać this jednak dla jasności, że działają na członka klasy. To nie jest opcjonalne w PHP.

2

Można to zrobić w każdej metodzie

extract(get_object_vars($this)); 

Mimo że pozwoliłby tylko uzyskać zmienne, a nie metody, ani właściwości statycznych. I nie będą to odniesienia, tak przydatne tylko do czytania.

+0

Uratowałeś mi php rant. – clankill3r

Powiązane problemy