Nelle precedenti lezioni abbiamo utilizzato le parole "variabili" e "funzioni" per indicare le diverse componenti di una classe. In realtà, anche se concettualmente corrette, queste definizioni sono errate. Nella OOP queste componenti vengono chiamate rispettivamente proprietà (o membri) e metodi. Ecco un semplice snippet che chiarisce questo concetto:
// variabili
$a = 10;
$b = 20;
// funzioni
function sayHello() {
// ...
}
function anotherFn() {
// ...
}
class MyClass {
// proprietà
public $a = 10;
public $b = 20;
// metodi
public function sayHello() {
echo "Hello! " . $this->a . " " . $this->b;
}
}
Questa separazione è molto importante: mentre le normali variabili e funzioni sono componenti libere o di primo livello, le proprietà ed i metodi di una classe appartengono esclusivamente a questa classe (ed eventualmente alle classe che ereditano, come vedremo nelle successive lezioni).
Uso delle proprietà
Come abbiamo potuto notare nel corso degli esempi precedenti, è possibile assegnare un valore alle proprietà di una classe direttamente nella fase di dichiarazione delle stesse. Ciò che è importante sapere inoltre, è che non si è limitati ai valori semplici (interi, float e boolean), ma è possibile utilizzare anche i valori composti, come gli array, oppure le costanti. Ecco un esempio:
define('ABC', 10);
class MyClass {
// proprietà
public $a = array(10, 20, 30, 40, array(50, 60));
public $b = true;
public $c = 8.5;
public $d = 20;
public $e = ABC;
}
Non si ha però a disposizione tutta la libertà che si avrebbe nel caso delle semplici variabili. Le seguenti operazioni sono infatti errate:
$c = 30;
function get_10() {
return 10;
}
class MyClass {
// proprietà
public $a = new MyAnotherClass; // errore
public $b = get_10(); // errore
public $c = $c; // errore
}
Uso dei metodi
I metodi di una classe si comportano esattamente allo stesso modo delle funzioni di primo livello, tranne per il fatto che i primi riconoscono tutte le keyword appartenenti alla classe (come nel caso di $this
che abbiamo studiato nella lezione precedente) mentre, ovviamente, i secondi no. È dunque possibile dichiarare liste variabili di argomenti, impostare valori di default agli argomenti e restituire riferimenti al posto dei valori:
class MyClass {
// ...
public function doSomething($a = 10, $b = array(10, 20, 30)) {
echo $a . $b[0];
}
public function &getRef() {
return $this->a;
}
}
$my = new MyClass();
// stampa "1010"
$my->doSomething();
Conclusione
In questa lezione abbiamo imparato come utilizzare due dei tre componenti fondamentali di una classe che ci permettono di centralizzare l'implementazione e rendere modulare l'esecuzione. Nella prossima lezione analizzeremo gli ultimi componenti basilari che è possibile porre all'interno di una classe: le costanti.