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

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

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);