Abbiamo visto come all’interno di una classe possiamo definire delle funzioni che prendono il nome di metodi.
Ci sono due tipologie di metodi:
- metodi che vengono eseguiti soltanto se esplicitamente invocati
- metodi che vengono eseguiti automaticamente da PHP in certi momenti (metodi magici)
Il metodo magico __construct
in PHP è un metodo speciale che viene invocato automaticamente quando un oggetto viene istanziato (cioè quando viene creato un nuovo oggetto a partire dalla classe).
Il metodo __construct
viene utilizzato per inizializzare gli attributi dell’oggetto e per eseguire eventuali altre operazioni necessarie per preparare l’oggetto all’uso.
Il metodo __construct
ci aiuta ad avere una sintassi più breve e leggibile quando istanziamo un oggetto.
Sintassi del metodo construct
class Esempio {
public function __construct($argomento1,$argomento2,$argomento3...) {
// corpo del metodo
}
}
Come accedere alle proprietà dall’interno del metodo construct ($this)
Per accedere alle proprietà della classe dal metodo construct dobbiamo utilizzare la pseudo-variabile $this seguita dall’operatore -> e dal nome della proprietà, assegnandogli la variabile (argomento) che verrà data in input al metodo (funzione).
<?php
class Macchina {
public $modello = "A3";
public $anno = 1900;
public $colore = "nero";
public $marca = "Audi";
public $prezzo = 12000;
/* */
public function __construct($insModello,$insAnno,$insColore,$insMarca,$insPrezzo) {
$this->modello=$insModello;
$this->anno=$insAnno;
$this->colore=$insColore;
$this->marca=$insMarca;
$this->prezzo=$insPrezzo;
}
public function riepilogo(){
return "L'auto " . $this->marca
. " " . $this->modello
. " nella colorazione " . $this->colore
. "costa : " . $this->prezzo . " €";
}
}
$citroenC4 = new Macchina("C4 Cactus",2023,"Blu","Citroen",25000);
echo $citroenC4->riepilogo();
?>
Come creare oggetti invocando il metodo construct
Come abbiamo già specificato, per il metodo __construct si autoinvoca, quindi non c’è necessità di invocarlo quando creiamo un nuovo oggetto.
Per creare un nuovo oggetto utilizzando una sintassi più breve (usando il metodo magico __construct) ci basterà specificare in fase di creazione dell’oggetto, i valori delle proprietà. Facciamo un esempio:
// Se non utilizziamo il metodo construct, per creare un nuovo oggetto faremo:
$nuovoOggetto = new NomeClasse();
// Per dare dei valori alle proprietà del nuovo oggetto, avremmo dovuto fare:
$nuovoOggetto->username="DonatoPirolo";
$nuovoOggetto->eta=33;
$nuovoOggetto->email="info@mydonatopirolo.dev"
// Con il metodo construct invece ci basterà fare:
$nuovoOggetto = new NomeClasse("DonatoPirolo",33,"info@wordpress-1040479-3658918.cloudwaysapps.com")
Come possiamo vedere la differenza della sintassi utilizzata prima del metodo construct e dopo il metodo construct è notevolmente migliorata, facendoci risparmiare molte righe.
Esempio utilizzando il metodo construct
/lib/user.php
<?php
class User
{
// Dichiarazione delle proprietà (variabili)
public $username = "nome utente";
public $eta = 28;
public $email = "mario@rossi.it";
private $password = "secret123";
/* Creiamo un costruttore
Il metodo costruttore viene automaticamente invocato quando creiamo l'oggetto.
Quindi quando istanziamo un oggetto, questa funzione si auto-invoca.
All'interno della funzione __construct() inseriamo gli argomenti che vogliamo passare in input
usiamo la pseudovariabile $this seguita dall'operatore -> per assegnare alle proprietà della classe
i valori dati in input al costruttore.
*/
public function __construct($InputUsername,$InputEta,$InputEmail,$InputPassword) {
$this->username=$InputUsername;
$this->eta=$InputEta;
$this->email=$InputEmail;
$this->password=$InputPassword;
}
// Dichiarazione del metodo (funzioni)
public function riepilogo(){
// Accesso alle proprietà tramite pseudovariabile $this
return "Utente: $this->username <br>"
. "Età: $this->eta <br>"
. "Email: $this->email <br>"
. "Password: $this->password <br>";
}
}
?>
/index.php
<?php
// importiamo la classe
require __DIR__ . '/lib/user.php';
/* Crezione istanza da classe (oggetto)
Dopo aver impostato la funzione magica __construct, possiamo dare in input
i valori alle proprietà dei nuovi oggetti. E come possiamo vedere la sintassi diventa molto più
breve e leggibile di quella usata in precedenza per assegnare i valori
*/
$utente1 = new User("DonatoPirolo",33,"info@wordpress-1040479-3658918.cloudwaysapps.com","secret567");
$utente2 = new User("MartinaSciuto",30,"info@martina.net","secret567");
$utente3 = new User("SaraBilboa",33,"sara@bilboa.de","secret987");
// Invocazione della funzione (metodo) creato all'interno della classe.
echo $utente1->riepilogo() . "<br>";
echo $utente2->riepilogo() . "<br>";
echo $utente3->riepilogo();
?>