PHP с каждым большим обновлением все больше стримится к строгой типизации. Так вначале пути нельзя было вообще указывать типы (было просто var), потом стало можно указывать типы у аргументов, но нельзя указывать возвращаемый тип. Потом добавили скалярные типы, nullable. Потом типы у свойств классов и так далее. Но несмотря на все это - PHP не является строго типизированным языком, что дает много свободы разработчикам. Директива declare(strict_types=1) показывает интерпретатору то, что в данном файле будет использоваться строгая типизация. Это так сказать "бьет по рукам" неграмотным разработчикам, выдавая ошибки при нарушении типизации. Рассмотрим пример: function printText(string $text ) {
echo $text;
} printText(1); // выведет 1 printText('Hello'); // выведет Hello Тут представлена обычная функция, которая принимает текст и выводит его. Если не объявлять строгую типизацию, то никаких ошибок не будет. Код спокойно выведет оба варианта, несмотря на то, что мы передали в первом варианте