Ce face class / new / $this
O clasă descrie un tip de obiect. De exemplu, clasa Produs spune că orice produs are un nume și un preț și că știe să își calculeze prețul cu TVA. Datele se numesc proprietăți, iar funcțiile din clasă se numesc metode.
Cu new creezi un obiect (o instanță) din clasă. Accesezi proprietățile și metodele obiectului cu săgeata ->. În interiorul clasei, $this înseamnă „obiectul curent”.
Numele claselor se scriu de obicei cu majusculă la fiecare cuvânt (CosCumparaturi). Constanta specială NumeClasa::class dă numele complet al clasei, ca text.
Exemple
Exemplul 1: O clasă simplă și un obiect
<?php
class Produs
{
public string $nume = "";
public float $pret = 0;
public function pretCuTva(): float
{
return $this->pret * 1.21;
}
}
$mouse = new Produs();
$mouse->nume = "Mouse";
$mouse->pret = 100;
echo $mouse->nume . " costă " . $mouse->pretCuTva() . " lei cu TVA.";
Rezultat
Mouse costă 121 lei cu TVA.
Exemplul 2: Fiecare obiect are datele lui
Două obiecte create din aceeași clasă sunt independente: modificarea unuia nu îl schimbă pe celălalt.
<?php
class Contor
{
public int $valoare = 0;
public function creste(): void
{
$this->valoare++;
}
}
$a = new Contor();
$b = new Contor();
$a->creste();
$a->creste();
$b->creste();
echo "a = $a->valoare, b = $b->valoare";
Rezultat
a = 2, b = 1
Exemplul 3: Metode care returnează $this (apeluri în lanț)
<?php
class Mesaj
{
private array $parti = [];
public function adauga(string $text): static
{
$this->parti[] = $text;
return $this;
}
public function text(): string
{
return implode(" ", $this->parti);
}
}
echo (new Mesaj())->adauga("Salut,")->adauga("Ana!")->text();
Rezultat
Salut, Ana!
Greșeli frecvente
- Uiți
$this->în metodă și scrii doar$pret. Acea variabilă locală nu există și primeștiUndefined variable $pret. - Pui semnul dolar după săgeată:
$obiect->$nume. Corect este$obiect->nume. Cu dolar, PHP folosește valoarea variabilei$numeca nume de proprietate. - Atribui o proprietate nedeclarată în clasă. Din PHP 8.2 primești mesajul
Deprecated: Creation of dynamic property. Declară toate proprietățile în clasă.
Comenzi înrudite
__construct: Constructorul este metoda rulată automat la new. Pregătește obiectul cu datele de pornire.public / private / protected: Stabilește cine are acces la o proprietate sau metodă: oricine (public), doar clasa (private) sau și clasele copil (protected).extends / parent::: Creează o clasă nouă pornind de la una existentă (moștenire). Clasa copil primește tot ce are părintele.static / self::: Membrii static aparțin clasei, nu unui obiect anume. Se apelează cu NumeClasa::metoda(), fără new.get_class / get_parent_class: Returnează numele clasei unui obiect (get_class) sau numele clasei părinte (get_parent_class).