Un'altra, ottima caratteristica guadagnata con l'arrivo di PHP5 è il cosiddetto Type Hinting, ovvero il "suggerimento del tipo". Grazie al Type Hinting possiamo forzare l'uso di un particolare tipo di oggetto come parametro di una funzione o di un metodo, facendo precedere il namespace dello stesso dal nome della classe desiderata:
// la funzione accetta solo oggetti di tipo MyClass
function giveMeObj(MyClass $obj) {
echo $obj->getName();
}
$obj1 = new MyClass();
// stampa il valore della proprietà "name"...
giveMeObj($obj1);
Ovviamente, se non rispettiamo il suggerimento, PHP produrrà un errore di tipo Catchable fatal error che ci indicherà che abbiamo passato un tipo di dato errato:
$a = 10; giveMeObj($a); Catchable fatal error: Argument 1 passed to giveMeObj() must be an instance of MyClass, integer given, called in [...]
Il Type Hinting non funziona solo ed esclusivamente con le classi indicate, ma la sua valenza si espande anche alle varie sottoclassi. Ciò significa che se, per esempio, abbiamo una classe MyOtherClass che estende la classe MyClass ed utilizziamo il Type Hinting MyClass, possiamo passare anche un'istanza di tipo MyOtherClass:
class MyClass {
public $name = "name";
public function getName() {
echo $this->name;
}
}
class MyOtherClass extends MyClass {
public function getName() {
echo "The name is " . $this->name;
}
}
function giveMeObj(MyClass $obj) {
echo $obj->getName();
}
$obj1 = new MyOtherClass();
// Stampa "The name is name"
giveMeObj($obj1);
Ovviamente non si può affermare il contrario: se specifichiamo un Type Hinting di tipo MyOtherClass, non possiamo utilizzare un'istanza di tipo MyClass altrimenti, anche in questo caso, PHP genererà un errore di tipo Catchable fatal error:
function giveMeObj(MyOtherClass $obj) {
echo $obj->getName();
}
$obj1 = new MyClass();
// Produce:
// Catchable fatal error: Argument 1 passed to giveMeObj() must be an instance of MyOtherClass, instance of [..]
giveMeObj($obj1);
Infine, come ultimo tassello, possiamo utilizzare anche i namespace delle interfacce come Type Hinting: ogni classe che implementa un'interfaccia del tipo indicato costituirà un parametro accettabile:
// interfaccia ICommon
interface ICommon {
public function getName();
public function getNickName();
}
// classe MyClass
class MyClass implements ICommon {
public $name = "name";
public $nickname = "nickname";
public function getName() {
echo $this->name;
}
public function getNickName() {
echo $this->nickname;
}
}
// classe MyOtherClass
class MyOtherClass implements ICommon {
public $name = "name";
public $nickname = "nickname";
public function getName() {
echo "The name is " . $this->name;
}
public function getNickName() {
echo "The nickname is " . $this->nickname;
}
}
// funzione giveMeObj
function giveMeObj(ICommon $obj) {
echo $obj->getName();
}
// istanze
$obj1 = new MyClass();
$obj2 = new MyOtherClass();
// Stampa "name"
giveMeObj($obj1);
// Stampa "The name is name"
giveMeObj($obj2);
Come abbiamo potuto osservare nel corso di questa lezione, il Type Hinting è uno strumento molto potente ed allo stesso tempo flessibile, che ci permette di porre ulteriori regole all'interno delle nostre applicazioni OOP. Grazie ad esso, possiamo avere un maggiore controllo sui parametri delle funzioni e dei metodi, rendendo gli script maggiormente robusti. Nella prossima lezione osserveremo con quali metodologie è possibile confrontare tra loro gli oggetti.
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 |