Autor Zpráva
ineedmoremen
Profil *
zdravim,

zacinam se ucit oop a mam tu jeden problem. Vubec nechapu, jak se pouziva $this.
Cetl jsem navody na php.net a celkove prolejzal net, ale nikde neni zadne vysvetleni, z ktereho bych to pochopil.
Nemohl by mi to nekdo vysvetlit, jako pro totalniho lajka? bez nejakych odbornych vyrazu, kdyztak i s prikladem?
Dekuju moc. :)
juriad
Profil
Představ si objekt jako krabičku a třídu jako návod k ní. Návod ti říká, jaké metody můžeš volat, k jakým proměnným přistupovat.
Přístup probíhá pomocí operátoru šipka ->. Tedy pokud máš objekt v proměnné $a a chceš volat metodu run() napíšeš: $a->run();
Někdy však chceš volat jednu metodu z jiné metody v rámci té samé krabičky, v takovém případě ji zavoláš $this->run();, protože krabička sama o sobě nemá jméno, ale ty víš, že je to tato.
Obdobně s přístupem k proměnným; pokud chceš něco uložit do proměnné, která patří krabičce $a uděláš to: $a->název = 'blak';. Pokud to samé chceš provést z nějaké metody krabičky, musíš k té proměnné přistupovat přes $this: $this->název = 'blak';
ineedmoremen
Profil *
juriad:
Ježiši to je to takhle jednoduchý? :D Tak teď to chápu. Děkuji mockrát! Suprově vysvětlené! Ještě jednou, díky moc.
Taps
Profil
juriad:
takže v rámci OOP by nemělo docházet k tomuto zápisu ?
<?
$a = 'obsah proměnné';
?>
ale pouze k tomuto zápisu ?
<?
$this->a = 'obsah proměnné';
?>
juriad
Profil
Taps:
Mé vyjádření se týká objektů (krabiček). Lokální proměnné v globálním kontextu, v metodách a funkcích se stále používají stejně.

Ještě kromě běžných proměnných a metod v rámci krabičky existují takzvané statické proměnné a metody, které jsou sdíleny napříč všemi krabičkami stejného typu. K nim se přistupuje pomocí názvu třídy (typu) a čtyřtečky ::. Tedy například: Typ::statickáMetoda() zvenku krabičky a self::statickáMetoda() zevnitř krabičky. self se chová podobně jako $this ale slouží pro přistup k statickým věcem. Statické metody nemají možnost jakýmkoli způsobem přistupovat k $this (tedy ani k instančním (nestatickým) proměnným a metodám).

Více bych to raději nerozváděl, analogie s krabičkami se může velice snadno rozsypat. Zatím nechci psát kapitolu o OOP. :)

Stručně doplněno; díky Alpharde
Alphard
Profil
juriad:
a ve funkcích se stále používají stejně
Možná bych zdůraznil, že i v metodách v rámci tříd mají samozřejmě své místo lokální proměnné. A malou poznámečku, že existuji statické proměnné, které fungují úplně jinak.
Aby tady nevznikal dojem (viz [#4] Taps), že „všude nacpu $this-> a budu tomu říkat objektový kód“.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: