В PHP 5 есть возможность использования контроля типов. При передаче параметром есть возможность проверить данные на такие типы: объекты (путем указания имени класса в прототипе функции), интерфейсы, массивы, колбеки с типом callable (начиная с PHP 5.4).

Пример использования:

<?php
class MyClass {
	
	public function names(array $names) { // тип array
		$res = "<ul>";
		foreach($names as $name) {
			$res .= "<li>{$name}</li>";
		}
		return $res .= "</ul>";
	}
	
	public function otherClassTypeFunc(OtherClass $otherClass) { // тип OtherClass
		return $otherClass->var1;
	}
}

$obj = new MyClass;

$names = array(
	'Иван Андреев',
	'Олег Симонов',
	'Андрей Ефремов',
	'Алексей Самсонов'
);
echo $obj->names($names); // работает

$names = "Олег Симонов";

// получим фатальную ошибку: Argument 1 passed to MyClass::names() must be of the type array, string given
echo $obj->names($names); 

// получим фатальную ошибку: Argument 1 passed to MyClass::names() must be an instance of OtherClass, string given
echo $obj->otherClassTypeFunc("test string");
?>