Rakovskiy, Явное лучше неявного
Это даёт гарантию того, что приложение будет вести себя так, как ожидается. Без хинтинга баги ловить труднее, да и отладка порой может быть не лёгкой.
Возьмём вот этот код:
class Service {
public function doSomething() {
}
}
class ServiceFactory {
public function createService() {
return new Service();
}
}
$factory = new ServiceFactory();
$service = $factory->createService();
$service->doSomething();Потом я что-то переделал и теперь метод createService возвращает не экземпляр класса Service, а CustomService, у которого нет метода doSomething(); или что ещё хуже, есть, но делает не то, что ожидается.
Допустим, я везде всё переписал, но одно место не заметил. Хорошо, если пишутся тесты, они помогут найти баг, а если их нет, то с большой вероятностью баг возникнет на продакшене. И без тайп-хинтинга этот код будет валидным. А что он будет делать, никому неизвестно.