Constructor property promotion - OOP in PHP

Constructor property promotion - OOP in PHP

Il constructor property promotion è una funzionalità introdotta in PHP 8.0 che semplifica la definizione di classi con molte proprietà. Consente di definire le proprietà e il costruttore di una classe in modo più conciso e leggibile, senza dover ripetere le stesse proprietà in entrambi i posti.

Come abbiamo visto con il metodo magico __construct, dovevamo specificare più volte le proprietà da passare, creando del codice ridondante. Con la sintassi del costructor property promotion invece, ci basterà scriverlo una sola volta.

Sintassi di constructor property promotion

class MyClass {
    public function __construct(
        public $property1,
        private $property2,
        protected $property3
    ) {
        // ...
    }
}

Esempio utilizzando il metodo construct property promotion

/lib/automobile.php

<?php
class Automobile 
{
    function __construct(
        public string $marca,
        public string $modello,
        public string $tipologia,
        public int|float $prezzo = 0
        ){
    }

    public function riepilogo(){
        return "Marca: $this->marca <br>
        Modello: $this->modello <br>
        Tipologia: $this->tipologia <br>
        Prezzo: $this->prezzo <br><br>";
    }
}
?>

/index.php

<?php
require __DIR__ . '/lib/automobile.php';

//crezione nuove istanze
$citroenC4 = new Automobile("Citroen","C4 Cactus","CrossOver",25000);
$panda4x4 = new Automobile("Fiat","Panda 4x4","Fuoristrada",15000);
$audiR8 = new Automobile("Audi","R8","Coupè",105000);

//invocazione metodo riepilogo()
echo $citroenC4->riepilogo();
echo $panda4x4->riepilogo();
echo $audiR8->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