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>