Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 31 di 50
  • livello avanzato
Indice lezioni

Istanziare una classe: il costruttore

Il metodo costruttore: decidere il comportamento dell'oggetto al momento della sua creazione
Il metodo costruttore: decidere il comportamento dell'oggetto al momento della sua creazione
Link copiato negli appunti

Come ho accennato nella terza lezione, è possibile passare dei parametri dopo il nome della classe nella fase di creazione delle istanze. In questa lezione cercheremo di capire perché ciò avviene ed in che modo è possibile personalizzare la creazione delle istanze.

Prendiamo come esempio la classe MyClass che abbiamo dichiarato nel corso delle lezioni precedenti:

class MyClass {
        // proprietà
        public $a = 10;
        public $b = 20;

        // metodi
        public function sayHello() {
                echo "Hello! " . $this->a . " " . $this->b;
        }
}

$myClass_1 = new MyClass();
$myClass_2 = new MyClass;

Come possiamo vedere, la lista dei parametri è vuota omettere le parentesi costruttore quale comportamento deve assumere l'oggetto quando viene creato

Il metodo costruttore infatti, viene richiamato nella fase di creazione dell'oggetto e si dichiara tramite la funzione (o metodo magico) __construct (esistono svariati metodi magici nella OOP di PHP, che sono contrassegnati dal doppio underscore "__" iniziale e che verranno analizzati dettagliatamente nella successive lezioni). Ecco un esempio di classe avente un costruttore:

class MyClass {

        // proprietà
        public $a = 10;
        public $b = 20;
        // costruttore
        public function __construct($a, $b) {
                $this->a = $a;
                $this->b = $b;
        }

        // metodi
        public function sayHello() {
                echo "Hello! " . $this->a . " " . $this->b;
        }
}

// creazione delle istanze
$myClass_1 = new MyClass(40, 40);
$myClass_2 = new MyClass("a", "b");

La funzione __construct a b

Ovviamente in questo caso, non possiamo omettere i parametri nella fase di creazione delle istanze, altrimenti PHP genererebbe un E_WARNING che ci avvisa della mancata presenza dei parametri richiesti dal costruttore:

Warning: Missing argument 1 for MyClass::__construct(), called in [...] on line 80 and defined in [...] on line 67

Warning: Missing argument 2 for MyClass::__construct(), called in [...] on line 80 and defined in [...] on line 67

Sfruttando la potenza del metodo costruttore, possiamo essere veramente creativi compiendo svariate operazioni ed imponendo controlli al suo interno:

class MyClass {

        // proprietà
        public $a = 10;
        public $b = 20;
        // costruttore
        public function __construct($a, $b) {
                // gli argomenti devono essere interi
                if(!is_int($a) || !is_int($b)) exit("The arguments must be integers!");
                // gli argomenti devono essere minori di 100
                if($a > 100 || $b > 100) exit("The arguments must be less than 100!");

                $this->a = $a;
                $this->b = $b;
                // connessione ad un nostro dataase interno
                connect_to_my_db($this->a, $this->b);

                // operazioni...
        }
        // metodi ...

}
// creazione delle istanze
$myClass_1 = new MyClass(40, 80);               // ok
$myClass_2 = new MyClass("a", "b");             // errore: "The arguments must be integers!"

Conclusione

Tramite l'uso del metodo costruttore, che rappresenta il metodo più importante in assoluto nella OOP, è possibile personalizzare il comportamento della classe in fase di creazione delle istanze e dunque favorire l'impostazione dei parametri direttamente tramite un'unica linea di codice. Ma se esiste un metodo che viene richiamato quando si creano gli oggetti, è altrettanto vero che ne esiste un altro che viene richiamato quando si distruggono: quest'ultimo prende il nome di distruttore e verrà analizzato direttamente nella prossima lezione.

Ti consigliamo anche