Stojíš před výzvou naučit se základy objektově orientovaného programování v PHP? V centru této problematiky stojí speciální reference $this a self. Tato dvě klíčová slova jsou rozhodující pro práci s objekty a třídami v PHP, protože řídí komunikaci a přístup k instančním proměnným a konstantám. Pojďme společně osvětlit rozdíly a používání těchto konceptů.
Nejdůležitější poznatky
- $this je reference na aktuální objekt a používá se v instančních metodách.
- self odkazuje na aktuální třídu a používá se k přístupu ke statickým vlastnostem a metodám, stejně jako ke konstantám.
- Rozdíl mezi $this a self je zásadní pro pochopení objektově orientovaného programování v PHP.
Pochopení reference $this
Začněme klíčovým slovem $this. $this je speciální proměnná, která odkazuje na aktuální objekt. Když uvnitř instanční metody přistupuješ k $this, můžeš se dostat ke všem instančním proměnným a metodám tohoto specifického objektu.

Předpokládejme, že máš třídu Database, kterou instancuješ. Uvnitř metody této třídy můžeš například přistupovat k instančním proměnným jako User nebo Pass. To se děje přes $this->User nebo $this->Pass. Tyto proměnné existují pouze v kontextu daného objektu, a proto je $this rozhodující.
Je důležité vědět, že $this představuje univerzální referenci, která vždy ukazuje na aktuální objekt. Pokud existují další objekty, $this bude kontextově odkazovat na konkrétní objekt, ve kterém se kód právě nachází.
Klíč self podrobně
Klíčové slovo self na druhou stranu není omezeno na instanci. Odkazuje na samotnou třídu, což ti umožňuje přistupovat ke statickým vlastnostem a konstantám třídy. Opět se podíváme na třídu Database. Předpokládejme, že jsi definoval konstantu uvnitř této třídy. K této konstantě můžeš přistupovat pomocí self::Konstanta.

Všimni si, že self je zejména užitečné pro statické metody a vlastnosti. Takové proměnné jsou k dispozici pro celou instanci třídy najednou, nikoli pro každý jednotlivý objekt. To je základní rozdíl proti instančním proměnným.
Samozřejmě existuje možnost, že chceš v metodě třídy přistupovat k statickým metodám nebo konstantám. V takovém případě použiješ self::Methode(), abys zajistil, že přístup bude proveden přes třídu, nikoli přes instanci.

Udělejme praktický příklad
Představ si, že chceš vytvořit třídu SIS. Zde je jednoduchý příklad, jak demonstrovat využití obou referencí.

Uvnitř této třídy bychom mohli definovat statické vlastnosti a metody. Řekněme, že máš metodu getName(), která používá instanční proměnnou name. Abychom přistupovali k této instanční proměnné, použili bychom $this->name.

Abychom však přistupovali ke konstantě KEY_PATH, která je definována v třídě, použijeme self::KEY_PATH. To zajišťuje, že při přístupu ke konstantám se nedostaneme do konfliktu instancí.
Nakonec pomocí echo ukážeš, že reference fungují. Můžeš bez problémů vypsat jak instanční proměnné, tak konstantní hodnoty, abys demonstroval, že jsou správně odkázány.

Shrnutí – Pochopení $this a self v PHP
V dnešním příspěvku jsi se naučil základy používání a rozdílů mezi $this a self v objektově orientovaném programování s PHP. Zatímco $this se specificky odkazuje na aktuální objekt, self míří na samotnou třídu. Tyto koncepty jsou zásadní pro efektivní vývoj v PHP.
Často kladené otázky
Jaký je rozdíl mezi $this a self?$this odkazuje na aktuální objekt, zatímco self na samotnou třídu.
Kdy bych měl použít $this?Použij $this, když chceš přistupovat k instančním proměnným nebo metodám.
Kdy je self smysluplné?self je smysluplné, když chceš přistupovat ke statickým vlastnostem nebo konstantám třídy.
Existuje nějaký zvláštní případ pro self?Ano, self je užitečné pro přístup k členům třídy uvnitř statických metod.
Jak se ujistit, že přistupuji ke správným instančním proměnným?Použij $this->variablenName, abys zajistil, že přistupuješ k hodnotám specifickým pro instanci.