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 in entrambe le dichiarazioni: addirittura è possibile omettere le parentesi se la classe non presenta un costruttore pubblico. Ciò significa che in questo caso non abbiamo modo di influire sui parametri della classe mentre stiamo istanziando un oggetto: tutte le istanze avranno inizialmente le stesse proprietà impostate agli stessi valori. Questo rappresenta ovviamente un limite, ma grazie al metodo costruttore, è possibile decidere 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 viene richiamata in fase di creazione delle istanze, in questo modo, è possibile fare assumere alla classe qualsiasi comportamento si voglia: nel nostro caso abbiamo dato la possibilità di specificare i valori delle proprietà a e b. Dato che nella funzione non abbiamo inserito nessun controllo sul tipo dei parametri, possiamo passare numeri (40, 40), stringhe ("a", "b") e così via.
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!"
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.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |