I trait - OOP in PHP

I trait - OOP in PHP

Cosa sono i trait?

I trait sono una tecnica per riutilizzare il codice che consente di definire un insieme di metodi che possono essere utilizzati da diverse classi in modo indipendente.

In altre parole, i trait consentono di definire un gruppo di metodi che possono essere utilizzati da più classi senza dover creare una gerarchia di classi complessa. Ciò significa che i trait sono utili quando si desidera riutilizzare il codice in più classi senza creare una catena di ereditarietà che potrebbe rendere il codice meno leggibile e difficile da mantenere.

Ad esempio, supponiamo di avere tre classi: "Automobile", "Camion" e "Moto". Ognuna di queste classi ha bisogno di un metodo "accelera". Invece di definire un metodo "accelera" in ogni classe, possiamo definire un trait "Accelerazione" che ha il metodo "accelera", e quindi utilizzare il trait in ciascuna delle tre classi.

Questo ci consente di riutilizzare il codice in modo efficiente, evitando la necessità di creare una gerarchia di classi complessa solo per condividere un insieme di metodi comuni.

Sintassi di un trait

La sintassi per definire un trait in PHP è la seguente:

trait NomeTrait {
  // definizione dei metodi del trait
  public function metodo1() {
    // corpo del metodo 1
  }

  public function metodo2() {
    // corpo del metodo 2
  }
}

Come utilizzare trait in una classe?

Per utilizzare un trait all'interno di una classe in PHP, è necessario utilizzare la parola chiave "use" seguita dal nome del trait. La sintassi generale per l'utilizzo di un trait in una classe è la seguente:

class NomeClasse {
    use NomeTrait;
    // altri metodi e proprietà
}

Esempio utilizzando classi e metodi astratti

<?php
/* i trait consentono di definire un gruppo di metodi che possono essere utilizzati da più classi 
 senza dover creare una gerarchia di classi complessa. Ciò significa che i trait sono utili quando 
 si desidera riutilizzare il codice in più classi senza creare una catena di ereditarietà che potrebbe 
 rendere il codice meno leggibile e difficile da mantenere.
*/
trait Accelerazione {
    public $secondi;
    public function zero_Cento(int|float $secondi){
        return "Abbiamo raggiunto i 100 km/h in : " . $secondi . " secondi";
    }
}

class Auto{
    // per invocare un trait usiamo la parola chiave use seguita dal nome del trait.
    use Accelerazione;
    public function autoAccelera($secondi){
        /*  possiamo invocare direttamente il trait con $this poichè il trait funziona come
            se stessimo facendo copia e incolla del codice all'interno della classe.
        */
        return $this->zero_Cento($secondi) . " in " . __CLASS__;
    }
}

class Moto{
    use Accelerazione;
    public function motoAccelera($secondi){
        return $this->zero_Cento($secondi) . " in " . __CLASS__;
    }
}

class Aereo{
    use Accelerazione;
    public function aereoAccelera($secondi){
        return $this->zero_Cento($secondi) . " in " . __CLASS__;

    }
}
$auto = new Auto();
$moto = new Moto();
$aereo = new Aereo();
echo $auto->autoAccelera(6.7) . "\n"; // output : Abbiamo raggiunto i 100 km/h in : 6.7 secondi in Auto
echo $moto->motoAccelera(4.2) . "\n"; // output : Abbiamo raggiunto i 100 km/h in : 6.7 secondi in Moto
echo $aereo->aereoAccelera(1.7) . "\n"; // output : Abbiamo raggiunto i 100 km/h in : 6.7 secondi in Aereo
?>

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