Desde PHP 5 se incorporan Type Hintings (Tipos Sugeridos). Ahora, las funciones pueden obligar a que sus parámetros sean objetos (especificando el nombre de la clase en el prototipo de la función) o arrays (desde PHP 5.1). Sin embargo, si se usa NULL como valor por omisión, podrá pasarse NULL como parámetro.
Example #1 Ejemplos de Type Hinting
<?php
// Una clase de ejemplo
class MyClass
{
/**
* Una función de prueba
*
* El primer parámetro debe ser un objeto del tipo OtherClass
*/
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}
/**
* Otra función de prueba
*
* El primer parámetro debe ser un array
*/
public function test_array(array $input_array) {
print_r($input_array);
}
}
// Otra clase de ejemplo
class OtherClass {
public $var = 'Hola Mundo';
}
?>
Si no se satisface el type hint, se produce un error fatal capturable
<?php
// Una instancia de cada clase
$myclass = new MyClass;
$otherclass = new OtherClass;
// Error Fatal: El argumento 1 debe ser un objeto de la clase OtherClass
$myclass->test('hello');
// Error Fatal: El argumento 1 debe ser una instancia de OtherClass
$foo = new stdClass;
$myclass->test($foo);
// Error fatal: El argumento 1 no puede ser null
$myclass->test(null);
// Funciona: Imprime en pantalla Hola Mundo
$myclass->test($otherclass);
// Error Fatal: El argumento 1 debe ser un array
$myclass->test_array('a string');
// Funciona: Imprime en pantalla el array
$myclass->test_array(array('a', 'b', 'c'));
?>
También se puede usar con funciones:
<?php
// Una clase de ejemplo
class MyClass {
public $var = 'Hola Mundo';
}
/**
* Una función de prueba
*
* El primer parámetro debe ser un objeto del tipo MyClass
*/
function MyFunction (MyClass $foo) {
echo $foo->var;
}
// Funciona
$myclass = new MyClass;
MyFunction($myclass);
?>
Type hinting que acepta valores de tipo NULL:
<?php
/* Se acepta el valor NULL */
function test(stdClass $obj = NULL) {
}
test(NULL);
test(new stdClass);
?>
Sólo se puede usar Type Hints con los tipos object y (desde PHP 5.1) array. Por contra, no se pueden usar sugerencias tradicionales, como int o string.