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.