2010-01-19 7 views
5

Używam słowa kluczowego "ten" przez długi czas. Ale kiedy ktoś prosi mnie o wyjaśnienie, jestem zdezorientowany, jak to wyjaśnić. Wiem, że mogę użyć tego w metodzie klasy, aby uzyskać dostęp do dowolnej zmiennej i metody tej samej klasy.Jak wyjaśnić słowo kluczowe "ten" w najlepszy i najprostszy sposób?

class MyClass{ 

     function MyMethod1(){ 
     echo "Hello World"; 
     } 

     function MyMethod2(){ 
     $this->MyMethod1(); 
     } 

    } 

Czy jest to obiekt klasy, którego nie musimy inicjować i który może być użyty tylko w klasie lub cokolwiek innego. Jak to wyjaśnić?

Dzięki

+1

Po pewnym rozsądnym czasie odpowiedź z większością głosów zostaje zaakceptowana. – NAVEED

+0

Oto ładny artykuł na ten temat ** [Korzystanie ze słowa kluczowego "to" w PHP] (http://www.webdevelopmentbits.com/using-this-in-php) ** – rahul

Odpowiedz

13

Klasa jest formą dla obiektu: określa, jak obiekt wygląda (zmienne) i co może zrobić (funkcje).

Jeśli zainicjujesz zajęcia: tworzysz obiekt. Jeśli utworzysz klasę, możesz użyć "this", aby odnieść się do samego obiektu. Dlatego nie można ustawić "tego", ponieważ jest on powiązany z obiektem. Jest to specjalna zmienna tylko do odczytu.

+5

Jest to specjalna zmienna tylko do odczytu, której można użyć do odniesienia się do samego obiektu. Czy to jest poprawne ? – NAVEED

+0

Tak, to prawda. – Pindatjuh

5

this odwołuje się do bieżącej instancji obiektu z klasy.

jest niejawnie parametrem przekazywanym do metod klasy: ma zasięg do metody i umożliwia dostęp do wszystkich elementów obiektu.

+1

Prawdopodobnie nie jest wystarczająco proste, ale to jest najbardziej poprawna odpowiedź technicznie. –

2

skrócie: $this daje dostęp do zmiennych i metod obiektów() EDIT: w klasie :) Edit 2: (ale nie w metodach statycznych klasy): D

+3

w klasie :) – NAVEED

+0

poprawiona;) thx mate – dfens

+0

ale nie w metodach statycznych klasy :)) – NAVEED

2

jak ich nazwa sugeruje, że metody instancji działają w instancjach instancji klasy. Skąd wiedzą, na którym z nich pracować? Właśnie do tego służy parametr this.

Kiedy wywołujesz metodę instancji, naprawdę niewidzialnie przekazujesz dodatkowy parametr: obiekt, który go wywoła. Na przykład, jeśli masz ten:

class Basket { 
    public function a() { 
    $this-> ...; 
    // ... 
    } 
    // ... 
} 

i zadzwonić $some_basket->a(), za kulisami jesteś rzeczywiście nazywając coś podobnego Basket::a($some_basket). Teraz a() wie, z którym Basket chcesz pracować. Ten szczególny parametr odnosi się do: bieżącego obiektu, z którym masz do czynienia.

1

Klasa to szablon lub "kostka" dla obiektu.

Użyjmy klasycznego przykładu "rower". Jest wiele zawadiackich rowerów. Stworzyliśmy jednak jeden rower i możemy użyć słowa kluczowego "to", aby odnieść się do "tego" roweru.

W bardziej bardziej technicznym znaczeniu klasa jest szablonem obiektu, który zostanie utworzony. W czasie wykonywania, po utworzeniu instancji obiektu lub utworzeniu własnej instancji, możemy użyć słowa kluczowego "this" wewnętrznie, aby odnieść się do instancji, która uruchamia tę metodę.

2

Kilka osób wyjaśniło to w podobny sposób, ale pomyślałem, że dodam, że w rozmowach z osobami nieobeznanymi z programowaniem obiektowym wyjaśnię, że definicja klasy jest planem, tak jak w przypadku domu, i "to" jest rzeczywisty dom, w którym pracujesz w tym momencie. Mogą istnieć inne domy, które wyglądają dokładnie tak samo, ale jest to konkretny obiekt (dom).

Powiązane problemy