Quando utilizzare $this, self, parent, static - OOP in PHP
Indice
Quando si lavora con la programmazione orientata agli oggetti in PHP, ci sono quattro parole chiave che possono essere utilizzate per accedere a proprietà e metodi all'interno di una classe: $this
, self
, parent
e static
. Ognuna di queste parole chiave ha un uso specifico e può essere utile in determinate situazioni.
Riassumiamo in una tabella che confronta l'utilizzo di $this
, self
, parent
e static
:
Parola chiave | Utilizzo | Esempio |
---|---|---|
$this | Riferimento all'oggetto corrente | $this->nomeProprieta $this->nomeMetodo() |
self | Riferimento alla classe corrente (non all'istanza) | self::nomeProprieta self::nomeMetodo() |
parent | Riferimento alla classe genitore della classe corrente | parent::nomeProprieta |
static | Riferimento alla classe corrente (o figlia) dell'oggetto chiamante (late static binding) | static::nomeVariabile static::nomeMetodo() |
Quando utilizzare $this
La parola chiave $this
viene utilizzata per riferirsi all'oggetto corrente all'interno di una classe. Questo significa che può essere utilizzato per accedere alle proprietà e ai metodi non statici dell'oggetto stesso. Ad esempio, se si vuole accedere ad una proprietà chiamata "nome" all'interno della stessa istanza della classe, si può usare $this->name
.
class A {
public $aProp = "Proprietà aProp";
public function aMetod(){
return $this->aProp;
}
}
// Istanziamo classe contenente this
$usoThis = new A();
echo $usoThis->aMetod() . "\n";
Quando utilizzare self
La parola chiave self
viene utilizzata per riferirsi alla classe corrente (non all'istanza). Questo significa che può essere utilizzato per accedere alle proprietà e ai metodi statici della classe. Ad esempio, se si vuole accedere ad una variabile statica chiamata "numero" nella stessa classe, si può usare self::$number
.
class B {
public static $bProp = "Proprietà bProp";
public function bMethod(){
return self::$bProp;
}
}
// Istanziamo classe contenente self
$usoSelf = new B();
echo $usoSelf->bMethod(). "\n";
Quando utilizzare parent
La parola chiave parent
viene utilizzata per riferirsi alla classe genitore della classe corrente. Questo significa che può essere utilizzato per accedere alle proprietà e ai metodi della classe genitore. Ad esempio, se si vuole accedere ad un metodo chiamato "calcola()" nella classe genitore, si può usare parent::calcola()
.
Class C {
public function cMethod(){
echo "La classe :" . __CLASS__ . " contiente " . __METHOD__;
}
}
Class D extends C {
public function dMethod(){
parent::cMethod();
}
}
// Istanziamo classe contenente parent
$usoParent = new D();
echo $usoParent->dMethod(). "\n";
Quando utilizzare static
La parola chiave static
viene utilizzata per riferirsi alla classe corrente (o figlia) dell'oggetto chiamante (late static binding). Questo significa che può essere utilizzato per accedere alle proprietà e ai metodi statici della stessa classe o delle classi figlie. Ad esempio, se si vuole accedere ad un metodo statico chiamato "stampa()" nella stessa classe o in una delle classi figlie, si può usare static::stampa()
.
class E
{
public static $eProp = "Hello, World!";
public static function eMethod(){
echo static::$eProp;
}
}
class F extends E
{
public static $eProp = "Ciao, Mondo";
}
// Invochiamo
F::eMethod();