HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В этом уроке мы подробнее разберем работу с типами данных. Мы узнаем, какие они бывают и чем отличаются. Также рассмотрим, что такое слабая типизация, и почему она может создавать проблемы. Еще мы научимся явно преобразовывать типы, чтобы избежать этих проблем.</p>
1 <p>В этом уроке мы подробнее разберем работу с типами данных. Мы узнаем, какие они бывают и чем отличаются. Также рассмотрим, что такое слабая типизация, и почему она может создавать проблемы. Еще мы научимся явно преобразовывать типы, чтобы избежать этих проблем.</p>
2 <h2>Какие бывают типы данных</h2>
2 <h2>Какие бывают типы данных</h2>
3 <p>Существуют разные способы представлять данные в программах:</p>
3 <p>Существуют разные способы представлять данные в программах:</p>
4 <ul><li><strong>Строки</strong>- наборы символов в кавычках, вроде "Hello, World!"</li>
4 <ul><li><strong>Строки</strong>- наборы символов в кавычках, вроде "Hello, World!"</li>
5 <li><strong>Целые числа</strong>- например, 7, -198, 0</li>
5 <li><strong>Целые числа</strong>- например, 7, -198, 0</li>
6 </ul><p>Это две разные категории информации - два разных<strong>типа данных</strong>.</p>
6 </ul><p>Это две разные категории информации - два разных<strong>типа данных</strong>.</p>
7 <p>Операция умножения имеет смысл для целых чисел, но не имеет смысла для строк. Умножать слово "мама" на слово "блокнот" - бессмыслица. Тип данных определяет, что можно делать с элементами конкретного множества элементов.</p>
7 <p>Операция умножения имеет смысл для целых чисел, но не имеет смысла для строк. Умножать слово "мама" на слово "блокнот" - бессмыслица. Тип данных определяет, что можно делать с элементами конкретного множества элементов.</p>
8 <p>Язык программирования распознает типы. Поэтому PHP не позволит нам умножать текст на текст. Но позволит умножать целое число на другое целое число. Наличие типов и таких ограничений в языке защищает программы от случайных ошибок.</p>
8 <p>Язык программирования распознает типы. Поэтому PHP не позволит нам умножать текст на текст. Но позволит умножать целое число на другое целое число. Наличие типов и таких ограничений в языке защищает программы от случайных ошибок.</p>
9 <p>В отличие от строк, числа оборачивать в кавычки не нужно. Чтобы напечатать число 5, достаточно написать:</p>
9 <p>В отличие от строк, числа оборачивать в кавычки не нужно. Чтобы напечатать число 5, достаточно написать:</p>
10 <p>Число 5 и строка '5' - разные вещи, хотя вывод у print_r() для этих данных идентичный.</p>
10 <p>Число 5 и строка '5' - разные вещи, хотя вывод у print_r() для этих данных идентичный.</p>
11 <p>Целые числа, например, 1, 34, -19, и рациональные числа, например, 1.3, 1.0, -14.324, - это два отдельных типа данных. Такое разделение связано с особенностями устройства компьютеров. Есть и другие типы, с ними мы познакомимся позже.</p>
11 <p>Целые числа, например, 1, 34, -19, и рациональные числа, например, 1.3, 1.0, -14.324, - это два отдельных типа данных. Такое разделение связано с особенностями устройства компьютеров. Есть и другие типы, с ними мы познакомимся позже.</p>
12 <p>Пример с рациональным числом:</p>
12 <p>Пример с рациональным числом:</p>
13 <p>Типы данных "строка", "целое число" и "рациональное число" - это примитивные типы. Они встроены в сам язык PHP.</p>
13 <p>Типы данных "строка", "целое число" и "рациональное число" - это примитивные типы. Они встроены в сам язык PHP.</p>
14 <p>В язык также встроены и некоторые составные типы данных, но пока мы будем работать только с примитивными. Программисты также могут создавать собственные типы данных.</p>
14 <p>В язык также встроены и некоторые составные типы данных, но пока мы будем работать только с примитивными. Программисты также могут создавать собственные типы данных.</p>
15 <p>По-английски строки в программировании называются<strong>strings</strong>, а строчки текстовых файлов -<strong>lines</strong>. Например, в коде выше есть три lines, и нет strings.</p>
15 <p>По-английски строки в программировании называются<strong>strings</strong>, а строчки текстовых файлов -<strong>lines</strong>. Например, в коде выше есть три lines, и нет strings.</p>
16 <p>В русском языке может быть путаница, поэтому во всех уроках мы будем говорить "строка" для обозначения типа данных "строка", и "строчка" - для lines в файлах.</p>
16 <p>В русском языке может быть путаница, поэтому во всех уроках мы будем говорить "строка" для обозначения типа данных "строка", и "строчка" - для lines в файлах.</p>
17 <h2>Что такое слабая типизация</h2>
17 <h2>Что такое слабая типизация</h2>
18 <p>Мы могли складывать числа, потому что операция сложения - это операция для типа "числа". А если применить эту операцию к числу и строке:</p>
18 <p>Мы могли складывать числа, потому что операция сложения - это операция для типа "числа". А если применить эту операцию к числу и строке:</p>
19 <p>'7' - это строка, а не число, при этом интерпретатор PHP выдал ответ 8, как если бы мы складывали два числа. Когда PHP видит несоответствие типов, он сам пытается преобразовать информацию. В данном случае он преобразовал строку '7' в число 7, а потом сложил 1 и 7.</p>
19 <p>'7' - это строка, а не число, при этом интерпретатор PHP выдал ответ 8, как если бы мы складывали два числа. Когда PHP видит несоответствие типов, он сам пытается преобразовать информацию. В данном случае он преобразовал строку '7' в число 7, а потом сложил 1 и 7.</p>
20 <p>Не все языки так делают. PHP - это язык со<strong>слабой типизацией</strong>. Он знает о существовании разных типов, но относится к их использованию не строго. Он пытается преобразовывать информацию, когда это кажется разумным.</p>
20 <p>Не все языки так делают. PHP - это язык со<strong>слабой типизацией</strong>. Он знает о существовании разных типов, но относится к их использованию не строго. Он пытается преобразовывать информацию, когда это кажется разумным.</p>
21 <p>В языках со<strong>строгой типизацией</strong>сложить число со строкой не получится.</p>
21 <p>В языках со<strong>строгой типизацией</strong>сложить число со строкой не получится.</p>
22 <p>PHP был создан для интернета, а в интернете вся информация - это строки. Даже когда мы вводим на сайте номер телефона или год рождения, на сервер эта информация поступает не как числа, а как строки. Поэтому авторы языка решили, что автоматически преобразовывать типы - правильно и удобно.</p>
22 <p>PHP был создан для интернета, а в интернете вся информация - это строки. Даже когда мы вводим на сайте номер телефона или год рождения, на сервер эта информация поступает не как числа, а как строки. Поэтому авторы языка решили, что автоматически преобразовывать типы - правильно и удобно.</p>
23 <p>Такое автоматическое неявное преобразование типов с одной стороны и правда удобно. Но на практике это свойство языка создает множество ошибок и проблем, которые трудно найти. Код может иногда работать, а иногда не работать. Это зависит от того, "повезло" ли в конкретном случае с автоматическим преобразованием. Программист это заметит не сразу.</p>
23 <p>Такое автоматическое неявное преобразование типов с одной стороны и правда удобно. Но на практике это свойство языка создает множество ошибок и проблем, которые трудно найти. Код может иногда работать, а иногда не работать. Это зависит от того, "повезло" ли в конкретном случае с автоматическим преобразованием. Программист это заметит не сразу.</p>
24 <p>В дальнейших заданиях мы будем встречаться с таким поведением не раз. Часто будет возникать вопрос "почему мой код работает не так, как я ожидаю?".</p>
24 <p>В дальнейших заданиях мы будем встречаться с таким поведением не раз. Часто будет возникать вопрос "почему мой код работает не так, как я ожидаю?".</p>
25 <h2>Как явно преобразовать типы</h2>
25 <h2>Как явно преобразовать типы</h2>
26 <p>Преобразование типов - частая операция в веб-разработке. Для ее выполнения можно полагаться на слабую типизацию. Но во многих ситуациях лучше делать преобразование явно с помощью специального синтаксиса. Такой код понятнее и предсказуемее.</p>
26 <p>Преобразование типов - частая операция в веб-разработке. Для ее выполнения можно полагаться на слабую типизацию. Но во многих ситуациях лучше делать преобразование явно с помощью специального синтаксиса. Такой код понятнее и предсказуемее.</p>
27 <p>Пример явного преобразования типов:</p>
27 <p>Пример явного преобразования типов:</p>
28 <p>Явное преобразование типа работает так: перед значением в скобках указывается желаемый тип. В результате значение справа преобразуется в значение другого типа, указанного слева в скобках. На текущий момент мы знакомы только с двумя типами, но преобразование работает для любого типа.</p>
28 <p>Явное преобразование типа работает так: перед значением в скобках указывается желаемый тип. В результате значение справа преобразуется в значение другого типа, указанного слева в скобках. На текущий момент мы знакомы только с двумя типами, но преобразование работает для любого типа.</p>
29 <p>В более сложных ситуациях - например, при использовании функций, которые будем проходить позже - встречаются множественные преобразования: (string) (5 + ((int) '4')). Порядок вычисления этого выражения следующий:</p>
29 <p>В более сложных ситуациях - например, при использовании функций, которые будем проходить позже - встречаются множественные преобразования: (string) (5 + ((int) '4')). Порядок вычисления этого выражения следующий:</p>
30 <h2>Выводы</h2>
30 <h2>Выводы</h2>
31 <p>В этом уроке мы разобрали работу с типами данных: со строками и целыми числами. Мы узнали, что PHP - это язык со слабой типизацией. Он знает о существовании разных типов, но относится к их использованию не строго. Он пытается преобразовывать информацию, когда это кажется разумным.</p>
31 <p>В этом уроке мы разобрали работу с типами данных: со строками и целыми числами. Мы узнали, что PHP - это язык со слабой типизацией. Он знает о существовании разных типов, но относится к их использованию не строго. Он пытается преобразовывать информацию, когда это кажется разумным.</p>
32 - <p>Например, м можем указать '7' как строку, а не число. В этом случае, если по мнению интерпретатора PHP происходит несоответствие типов, он сам пытается преобразовать информацию.</p>
32 + <p>Например, мы можем указать '7' как строку, а не число. В этом случае, если по мнению интерпретатора PHP происходит несоответствие типов, он сам пытается преобразовать информацию.</p>
33 <p>Еще мы узнали, что не всегда можно полагаться на слабую типизацию. Во многих ситуациях лучше делать преобразование явно с помощью специального синтаксиса. Такой код будет понятнее и предсказуемее.</p>
33 <p>Еще мы узнали, что не всегда можно полагаться на слабую типизацию. Во многих ситуациях лучше делать преобразование явно с помощью специального синтаксиса. Такой код будет понятнее и предсказуемее.</p>