Переход к PHP5 - Типизация пареметров функций на уровне классов

ОГЛАВЛЕНИЕ

Типизация пареметров функций на уровне классов

Для параметров функций можно задавать класс, объект которого может быть передан по этому параметру. Во время работы скрипта, конструкция

function myFunction(MyClass $obj) {
}

равнозначна конструкции

function myFunction($obj) {
if (!(
$obj instanceof MyClass || $obj == null)) {
die(
'Argument 1 must be an instance of ClassName');
}
}

При этом instanceof распостраняется не только на имя класса, но и на всех его предков и реализуемые интерфейсы.

Например, следующий код выполнится без ошибок:

interface Editable {
function
edit();
}

abstract class
View {
abstract function
createView();
}

class
NewClass extends View implements Editable {
function
createView() { }
function
edit() { }
function
createMyView(View $obj) { }
function
doEdit(Editable $obj) { }
}

$c = new NewClass();
$c->createMyView($c);
$c->doEdit($c);