php

php

Il metodo magico Construct – OOP in PHP

Non ci sono commenti

Foto dell'autore

By Donato Pirolo

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();

?>

Lascia un commento