Указание типов (Type Hints)

В PHP 5 появилась новая возможность, обозначенная как Type Hinting, что можно перевести как "указание типов".

Теперь при определении функции можно указать тип ее параметра, как объект (путем указания имени класса в определении функции) или массив (начиная с PHP 5.1).

Пример. Пример Type Hinting

<?php  
// Пример класса
class MyClass
{
/**
* Тестовая функция
*
* Указываем, что первый параметр должен быть объектом типа OtherClass
*/
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}


/**
* Другая тестовая функция
*
* Указываем, что первый параметр должен быть массивом
*/
public function test_array(array $input_array) {
print_r($input_array);
}
}

// Другой пример класса
class OtherClass {
public $var = 'Hello World';
}
?>

Теперь несоответствие указанному типу приводит к фатальной ошибке

<?php
// Экземпляр каждго класса
$myclass = new MyClass;
$otherclass = new OtherClass;

// Fatal Error: Первый аргумент должен быть объектом класса OtherClass
$myclass->test('hello');

// Fatal Error: Первый аргумент должен быть экземпляром OtherClass
$foo = new stdClass;
$myclass->test($foo);

// Fatal Error: Первый аргумент не должен быть null$myclass->test(null);

// Работает: выводит "Hello World"$myclass->test($otherclass);

// Fatal Error: Аргумент 1 должен быть массивом
$myclass->test_array('a string');

// работает: выводит массив$myclass->test_array(array('a', 'b', 'c'));
?>

Указание типов работает и с функциями:

<?php  
// Пример класса
class MyClass {
public $var = 'Hello World';
}

/**
* Тестовая функция
*
* Первый параметр должен быть объектом типа MyClass
*/
function MyFunction (MyClass $foo) {
echo $foo->var;
}

// Работает$myclass = new MyClass;
MyFunction($myclass);
?>

Указание типов может работать только с типами object или array (начиная с PHP 5.1). Указание типов int и string не поддерживается.