HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Рассказываем, что такое strict_types в PHP и как вообще работать со строгой типизацией.</strong></p>
1 <p><strong>Рассказываем, что такое strict_types в PHP и как вообще работать со строгой типизацией.</strong></p>
2 <h2>Содержание</h2>
2 <h2>Содержание</h2>
3 <ul><li><a>Что делает строгая типизация</a></li>
3 <ul><li><a>Что делает строгая типизация</a></li>
4 <li><a>Как включить строгие типы</a></li>
4 <li><a>Как включить строгие типы</a></li>
5 <li><a>Маленькое предостережение</a></li>
5 <li><a>Маленькое предостережение</a></li>
6 </ul><h2>Что делает строгая типизация</h2>
6 </ul><h2>Что делает строгая типизация</h2>
7 <p>PHP исторически не был языком со строгой типизацией. Разработчики использовали переменные, в которые могли поместить практически что угодно. При этом во время своего развития PHP получал все больше и больше ограничений, связанных с типами.</p>
7 <p>PHP исторически не был языком со строгой типизацией. Разработчики использовали переменные, в которые могли поместить практически что угодно. При этом во время своего развития PHP получал все больше и больше ограничений, связанных с типами.</p>
8 <p>Подсказки, которые в параметрах метода или свойствах класса указывают разработчику на тип данных, при правильном использовании бывают очень полезны. Они могут выявлять ошибки перед запуском кода и делают жизнь программистов легче. Вообще, объявление типа для класса появляется в языке только с версии PHP 5.</p>
8 <p>Подсказки, которые в параметрах метода или свойствах класса указывают разработчику на тип данных, при правильном использовании бывают очень полезны. Они могут выявлять ошибки перед запуском кода и делают жизнь программистов легче. Вообще, объявление типа для класса появляется в языке только с версии PHP 5.</p>
9 <p>Обычно при передаче в функцию неожиданного типа PHP попытается автоматически привести значение к ожидаемому типу. Если была включена<a>строгая типизация</a>с помощью strict_types=1, PHP вместо приведения к другому типу данных просто выдаст исключение.</p>
9 <p>Обычно при передаче в функцию неожиданного типа PHP попытается автоматически привести значение к ожидаемому типу. Если была включена<a>строгая типизация</a>с помощью strict_types=1, PHP вместо приведения к другому типу данных просто выдаст исключение.</p>
10 <p>То есть использование declare(strict_types=1) сообщит PHP, что нужно выдавать<a>TypeError</a>, когда вы пытаетесь преобразовать примитивные значения.</p>
10 <p>То есть использование declare(strict_types=1) сообщит PHP, что нужно выдавать<a>TypeError</a>, когда вы пытаетесь преобразовать примитивные значения.</p>
11 <p>Например, как работает PHP без включенной строгой типизации:</p>
11 <p>Например, как работает PHP без включенной строгой типизации:</p>
12 <p>Запуск этого кода приведет к следующему результату:</p>
12 <p>Запуск этого кода приведет к следующему результату:</p>
13 <p>Функция dump из примера ожидает, что ей передадут целые числа. И хотя мы в одном из вызовов передаем ей строку, PHP самостоятельно преобразует ее в целое число и выдает результат. Конечно, IDE, которое использует программист, скорее всего, предупредит о преобразовании данных, но, тем не менее результат остается действующим PHP-кодом.</p>
13 <p>Функция dump из примера ожидает, что ей передадут целые числа. И хотя мы в одном из вызовов передаем ей строку, PHP самостоятельно преобразует ее в целое число и выдает результат. Конечно, IDE, которое использует программист, скорее всего, предупредит о преобразовании данных, но, тем не менее результат остается действующим PHP-кодом.</p>
14 <h2>Как включить строгие типы</h2>
14 <h2>Как включить строгие типы</h2>
15 <p>Включить строгую типизацию для примитивных значений очень просто - для этого нужно добавить команду declare(strict_types=1) в самое начало файла:</p>
15 <p>Включить строгую типизацию для примитивных значений очень просто - для этого нужно добавить команду declare(strict_types=1) в самое начало файла:</p>
16 <p>Запуск такого кода с объявлением о строгой типизации приведет к ошибке.</p>
16 <p>Запуск такого кода с объявлением о строгой типизации приведет к ошибке.</p>
17 <p>Использование strict_type поможет разработчику выявить ошибки еще на ранней стадии, ограничивая PHP для автоматического переопределения примитивных типов данных.</p>
17 <p>Использование strict_type поможет разработчику выявить ошибки еще на ранней стадии, ограничивая PHP для автоматического переопределения примитивных типов данных.</p>
18 <h2>Маленькое предостережение</h2>
18 <h2>Маленькое предостережение</h2>
19 <p>Есть одна важная вещь в работе strict_types, которую нужно обязательно учитывать. Запрет на переопределение примитивных типов работает только в файле, где используется это объявление. Это означает, что когда разработчик в другом файле использует класс, который где-то у себя имеет объявление strict_type, это не спасет от переопределения примитивных данных в этом PHP-файле.</p>
19 <p>Есть одна важная вещь в работе strict_types, которую нужно обязательно учитывать. Запрет на переопределение примитивных типов работает только в файле, где используется это объявление. Это означает, что когда разработчик в другом файле использует класс, который где-то у себя имеет объявление strict_type, это не спасет от переопределения примитивных данных в этом PHP-файле.</p>
20 <p>То есть строгая типизация применяется к вызовам функций, сделанным изнутри файла с включенной строгой типизацией, а не к функциям, объявленным в этом файле.</p>
20 <p>То есть строгая типизация применяется к вызовам функций, сделанным изнутри файла с включенной строгой типизацией, а не к функциям, объявленным в этом файле.</p>
21 <p><em>Эта статья является<a>переводом</a>материала "The way declare(strict_types=1) works in PHP" разработчика Marinus van Velzen в издании Dev.to.</em></p>
21 <p><em>Эта статья является<a>переводом</a>материала "The way declare(strict_types=1) works in PHP" разработчика Marinus van Velzen в издании Dev.to.</em></p>