• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed $this -> Czy to jest specjalna zmienna?

Object Storage Arubacloud
+3 głosów
3,610 wizyt
pytanie zadane 5 kwietnia 2015 w PHP przez HaKIM Szeryf (87,590 p.)
zamknięte 24 października 2015 przez efiku
Cześć. Tak jak w temacie, czy zmienna $this -> to jakaś specjalna, jeśli tak to do czego ona służy i gdzie można jej używać, i co ona dokładnie robi?
komentarz zamknięcia: Problem rozwiązany.

7 odpowiedzi

+9 głosów
odpowiedź 5 kwietnia 2015 przez Kabotyn Mądrala (5,650 p.)
wybrane 5 kwietnia 2015 przez HaKIM
 
Najlepsza
$this-> pozwala na odwołanie się do atrybutu lub metody wewnątrz klasy.

Mając wewnątrz klasy np. metody obliczCos() oraz jakasMetoda()  to np. wewnątrz metody jakasMetoda() jeżeli chcesz wywołać metodę obliczCos() to uzywasz składni z $this:

jakasMetoda() {

$this->obliczCos();

}

Tak można się też odwoływać do atrybutów np:  $this->jakisAtrybut = true;

Z $this interpreter wie, że chcesz wywołać metodę z wnętrza klasy z której ją wywołujesz, a nie jakąś inną metodą o tej samej nazwie.
komentarz 5 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Aaaaa! Rozumiem! Kurde, dzięki wielkie!
komentarz 5 kwietnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)
edycja 5 kwietnia 2015 przez Sebastian Fojcik

Oczywiście odwołując się wewnątrz klasy do czegokolwiek będącego częścia tej klasy,  nie używamy tego wskaźnika, choć kompilator mimo wszystko go sobie doda. Chodzi o czytelność.

class Prostokat
{
	int a, b;
public:
	void wprowadz() //kompilator może zamienić na void Prostokat::wprowadz()
	{		//to dlatego, że metody są wspólne dla wszystkich obiektów tej klasy
		cin >> a //kompilator zamieni sobie na cin >> this->a
		cin >> b //kompilator zamieni sobie na cin >> this->b
	}
}

Wskaźnik ten przydaje się, gdy chcemy przekazać funkcji jako argument, wskaźnik na klasę, z której wywołujemy funkcję. Przykład:

class Prostokat
{
public:
	int a, b;
	void pole()
	{
		cout << "Pole: " << iloczyn( this );
	}
}

int iloczyn( Prostokat *wsk )
{
	return ( (wsk->a) * (wsk->b) )
}

Oczywiście sens takiego rozwiązania jest katastrofalny, ale to tylko przykład. Odwołanie wewnątrz klasy do funkcji nie będącej częścią tej klasy jest ZAWSZE złym rozwiązaniem.

Pozdrawiam.

komentarz 6 kwietnia 2015 przez Kabotyn Mądrala (5,650 p.)
Masz rację, ale... pytanie jest w kategorii PHP, a tam często używa się $this.

Ale jeżeli rozpatrujemy C++ to się z Tobą zgadzam.
komentarz 6 kwietnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)
Muszę zacząć czytać nazwy kategorii. Dzięki za radę :)
+2 głosów
odpowiedź 24 października 2015 przez Schizohatter Nałogowiec (39,600 p.)

Nie tak jak wszyscy mówią - nie chodzi wcale o odwoływanie się do zmiennej wewnątrz klasy, to do aktualnego obiektu (instancji) klasy. Jest to diametralna różnica w znaczeniu, ponieważ rozwiewa wszelkie wątpliwości związane z zastosowaniem tego słowa kluczowego. Dzięki temu możemy np. zrobić chainowanie metod obiektu, robiąc przy danej metodzie coś takiego:

return $this;

I wtedy od razu możemy użyć kolejnej metody na obiekcie. Np.
$obiekt->dance()->sing();
Dzięki temu, że w dance() umieścimy return $this, możemy od razu użyć metody sing() z tej samej klasy.

Oczywiście $this daje też dostęp do metod i zmiennych właściwych dla danego obiektu.

komentarz 24 października 2015 przez HaKIM Szeryf (87,590 p.)

Mam do Ciebie pytanie (szukałem w google), co to znaczy "chainować"? Jedyne z czym kojarzy mi się te słowo to "Claim".

komentarz 24 października 2015 przez Schizohatter Nałogowiec (39,600 p.)
chain to "łańcuch". Oznacza to, hm... łańcuchowanie metod. Czyli zamiast wywoływać metody w ramach osobnych instrukcji, oddzielonych średnikami, wywołujemy je jedna po drugiej, przekazując odpowiedni obiekt w sposób dynamiczny. Słynie z tego między innymi jQuery :-)
komentarz 24 października 2015 przez HaKIM Szeryf (87,590 p.)

Czyli... Taki kod:

$data['Pull_out_entry'] = $this->Pull_out_entry_model->Pull_out_entry();

można nazwać chainowaniem, prawda?

komentarz 24 października 2015 przez Schizohatter Nałogowiec (39,600 p.)
Ano. Jego przeciwieństwiem byłoby coś w stylu:
pull_out_entry(pull_out_entry_model($this))
(jak mamy w tradycyjnym programowaniu funkcyjnym w PHP)
komentarz 24 października 2015 przez efiku Szeryf (75,160 p.)
Dodając do tego co napisał Soanvig.

https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/FluentInterface

Ktoś tu odkopał temat z 5kw ;D
+1 głos
odpowiedź 5 kwietnia 2015 przez Dorion300 Szeryf (90,250 p.)
http://pl.m.wikibooks.org/wiki/PHP/Klasy_i_obiekty Używane jest w klasach. Jeśli chcesz zmiennę która jest w tej samej obiekcie co funkcja (czynność) To wpisujesz $this - > zmienna = costam. $this zawiera adres obecnego obiektu.
komentarz 6 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Znalazłem chwilkę i klikuśnałem na linka, dzięki że jako jedyny dodałeś kod w języku Php, nie c++. Cóż, biorę się za czytanie. Serdecznie dzięki.
+1 głos
odpowiedź 5 kwietnia 2015 przez Bondrusiek Maniak (61,410 p.)

this jest to wskaźnik pokazujący na adres danej klasy. Umożliwia odwoływanie się do poszczogólnych cech oraz metod danej klasy. Nie można zmienić wartości this . Zawsze pokazuje na to samo. Często sie go uzywa w definicji klasy,metod. np:

class foo

{

               int bar ;

       public :

               foo(int baz) ;

               void pokaz();

};

foo::foo(int baz) : this->bar(baz);

void foo::pokaz() { cout << this->bar ;}

 

0 głosów
odpowiedź 5 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Tak, odwołuje się do zmiennej/metody w danej klasie, w której jest używana.

 

Edit: zależy co jest dalej po -> :)
komentarz 5 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Ale nie powiedziałeś mi co ona ma dokładnie robić.
komentarz 5 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Co masz dalej?
komentarz 5 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Nic, pytam do czego on dokładnie służy. : D Nie piszę nic w class. Ogarniam sobie powoli obiektowość. Właśnie teraz oglądam odcinek drugi o tym, na kanale Pana Mirosława Zelenta.
komentarz 5 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Podaj pełną instrukcję - inaczej Ci nie powiem o co chodzi...
komentarz 5 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Już nie trzeba, Kabotyn wyjaśnił mi to doskonale. : )
komentarz 5 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
W ten sposób odwołasz sie do zmienniej obiektu zdefiniowanej w class lub do metody obiektu, również zdefiniowanej w class
0 głosów
odpowiedź 5 kwietnia 2015 przez HaKIM Szeryf (87,590 p.)
Dziękuję Wszystkim za odpowiedzi. : )
0 głosów
odpowiedź 24 października 2015 przez Silverwind Użytkownik (730 p.)
<?php
    class Test {
        public $myName; //Nowo utworzona właściwość
        function Hello() {
            echo "Witaj, ".$this->$myName";
        }
    }
<?php
    class Test {
        public $myName; //Nowo utworzona właściwość
        function Hello() {
            echo "Witaj, ".$myName.";
        }
    }

Rozumiem że służy do odwołania się do funkcji lub argument bierzącej klasy ale w takim razie czym się różni pierwsze kod od drugiego.   

komentarz 24 października 2015 przez Boshi VIP (100,240 p.)
Tym, że twoja zmienna $myname jest niezadeklarowana i  dostanie notica?
komentarz 24 października 2015 przez Silverwind Użytkownik (730 p.)
no tak ale chodzi mi bardziej o użycie $this w tym przypadku. Jakie ma ono zastosowanie  czym się wyróżnia od bezpośredniego wywołania zmiennej
komentarz 24 października 2015 przez Boshi VIP (100,240 p.)
odwołujesz się do właściwości klasy a nie zmiennej lokalnej.
komentarz 24 października 2015 przez Silverwind Użytkownik (730 p.)
Wiem ,że to głupie pytanie ale chcę to zrozumieć dobrze.Czym się różni właściwość klasy od zmiennej lokalnej/   bo przeczuwam że jeszcze o czymś nie wiem
komentarz 24 października 2015 przez Boshi VIP (100,240 p.)
Wlaściwość jest to atrybut na którym operuje klasa. Np Samochód ma: moc silnika, kolor, rodzaj silnika itd. Na tych danych operujesz. Zmienne lokalne służą do lokalnych zadań takich jak przetrzymywanie danych  przy jakiś obliczeniach czy operacjach.

Podobne pytania

0 głosów
1 odpowiedź 295 wizyt
pytanie zadane 10 maja 2018 w PHP przez KoruS Obywatel (1,630 p.)
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 13 stycznia 2022 w PHP przez mat19 Obywatel (1,580 p.)
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 23 marca 2020 w PHP przez THEJOKERRED Nowicjusz (120 p.)

92,633 zapytań

141,503 odpowiedzi

319,883 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...