Valentínska akcia je tu! Získaj až 80 % extra kreditov ZADARMO na náš interaktívny e-learning. ZISTIŤ VIAC:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 2. diel - Prvý objektová aplikácie v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Odpovedá na DarkCoder
Tomáš Prčík:1. februára 21:05

Mimochodem, díky za snahu - ale i v tom jste podle mě natrefil na to, co vůbec není vysvětleno. K čemu to this vlastně je. Proč si v rámci té funkce nemůžu prostě vytvořit nějakou proměnnou a na jiném místě kódu - kde ji potřebuju si ji prostě zavolat. K čemu to this vlastně je? Musí se používat? Nemusí? Jak se z něho doluje hodnota v něm uložená? Je v tom strašný chaos.

Avatar
Odpovedá na DarkCoder
Tomáš Prčík:1. februára 21:10

Pardon - napadá mě to postupně. A co když si v rámci té funkce zavedu třeba tři proměnné? Jak je všechny narvu do toho this? Pokud teda nutné ho používat? Jestli si to pamatuju správně, tak mi to házelo nějakou chybu, když jsem se do this snažil vložit obsah jedné proměnné a pak nějaké jiné. Každopádně ale, udělat si v jedné funkci třeba tři proměnné s tím, že s tím pak chci nějak pracovat, podle mě není nesmyslná myšlenka. Vůbec není prostě někde popsáno, jak z té funkce dolovat obsah proměnných, abych je na jiném místě mohl použít. Resp. jak je teda dolovat z toho this. Ty lekce jsou fakt arogantní k času uživatele. Já to hrozně nemám rád, když někdo něco takového někomu dělá.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Tomáš Prčík
DarkCoder:1. februára 21:37

Třída je šablona která ukazuje jakou strukturu objekt bude mít. Je třeba si uvědomit že pro jednu šablonu může existovat více než jedna instance. Každá instance může mít různé hodnoty v atributech. Pokud je třída jedna, musím ji dát nějak vědět, pro jaký objekt se metoda volá. A k tomu právě slouží to $this.

Podívej se na následující příklad, ve kterém je třída s vícero atributy a metodami. Podívej, jak se pomocí $this přistupuje k atributům instance.

class Postava
{
    private string $jmeno;
    private int $unava;
    private int $energie;
    private int $zdravi;
    private int $penize;

    public function __construct(string $jmeno)
    {
        $this->jmeno = $jmeno;
        $this->unava = 50;
        $this->energie = 100;
        $this->zdravi = 100;
        $this->penize = 0;
    }

    // Odpočinek – ovlivňuje únavu, energii a zdraví
    public function odpocinout(int $doba): void
    {
        $this->unava -= $doba * 10;
        $this->energie += $doba * 5;
        $this->zdravi += $doba * 2;

        $this->unava = max(0, $this->unava);
        $this->energie = min(100, $this->energie);
        $this->zdravi = min(100, $this->zdravi);
    }

    // Práce – používá více atributů pomocí $this
    public function pracovat(int $hodiny): void
    {
        // práce zvyšuje peníze, ale zhoršuje stav postavy
        $this->penize += $hodiny * 150;
        $this->unava += $hodiny * 15;
        $this->energie -= $hodiny * 20;

        if ($this->energie <= 0) {
            $this->energie = 0;
            $this->zdravi -= 10; // vyčerpání škodí zdraví
        }

        $this->unava = min(100, $this->unava);
        $this->zdravi = max(0, $this->zdravi);
    }

    public function vypisStav(): void
    {
        echo "Postava: {$this->jmeno}\n";
        echo "Zdraví: {$this->zdravi}\n";
        echo "Energie: {$this->energie}\n";
        echo "Únava: {$this->unava}\n";
        echo "Peníze: {$this->penize}\n";
    }
}

a použití:

$postava = new Postava("Hrdina");

$postava->pracovat(4);
$postava->odpocinout(2);
$postava->vypisStav();

Co je důležité pro pochopení

$this->atribut = práce s konkrétním atributem konkrétní instance
Při volání metody se do $this dosadí instance pro kterou se metoda volá.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Tomáš Prčík
DarkCoder:1. februára 21:57

Jiný jednodušší příklad:

class Clovek
{
    private string $jmeno;
    private int $vek;

    // metoda, která nastavuje atributy
    public function nastav(string $jmeno, int $vek): void
    {
        $this->jmeno = $jmeno;
        $this->vek = $vek;
    }

    // metoda, která atributy používá
    public function vypis(): void
    {
        echo "Jméno: {$this->jmeno}, věk: {$this->vek}";
    }
}

A použití:

$clovek = new Clovek();

$clovek->nastav("Petr", 20);
$clovek->vypis();

Co je tady vidět (to nejdůležitější)

nastav() mění hodnoty atributů

vypis() čte hodnoty atributů

$this->jmeno a $this->vek vždy znamenají přístup k atributu té konkrétní instance“

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Tomáš Prčík:18:47

Zdravím, díky. No, to jste přesně uhodil hřebík na hlavu. Já absolutně nechápu, k čemu tam to this je. Mi ten zápis přijde, jako že postupně do toho this rvu jednu proměnnou po druhé. Ale vždyť to nedává žádný smysl. Ono je to teda nějaký array? Nebo to this pořád dokola v té funkci upravuju? Vždyť v těch funkcích přece můžou bít klidně jenom ty samotné proměnné - jak v klasických funkcích - a jejich hodnoty já si z nich na jiném místě kódu vytáhnu a budu si s nima něco dělat. Žádné this nepotřebuju, ne? Dá se Vám někam zavolat - já si Vás klidně zaplatím, ať mi to vysvětlíte. Jinak je to zase na hodiny lovení po večerech na internetu. Díky. Toto si totiž myslím, že v tom kursu chybí. A bez toho je v těch informacích strašný chaos. Člověk ten kód na konec nějak napíše - tím, že to padesátkrát zkusí, až to jednou vyjde. Ale vůbec tom nerozumí. Díky.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 5 správy z 35.