Il metodo magico Construct - OOP in PHP

Il metodo magico Construct - OOP in PHP

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

?>

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2023
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram