Тема 6. Описание языка. Строительные блоки 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема 6. Описание языка. Строительные блоки



ТЕМА 6. ОПИСАНИЕ ЯЗЫКА. СТРОИТЕЛЬНЫЕ БЛОКИ

1) Переменные

2) Типы переменных

3) Операторы и выражения

4) Константы

Переменные

Переменная - это специальный контейнер, который содержит значение согласноопределению пользователя. Переменные являются основой программирования. Без них пришлось бы "жестко" закодировать все числовые значения в своих сценариях. Например, при сложении двух чисел и печати результата получается что-то полезное:

print (2+4);

Однако этот сценарий полезен только для тех, кто хочет знать сумму чисел 2 и 4. Чтобы выйти из положения, можно написать сценарий нахождения суммы двух других чисел, скажем 3 и 5. Этот подход к программированию явно абсурден. Переменные дают возможность создавать шаблоны для операций (сложение двух чисел, например), не заботясь о том, какие именно значения они содержат. Таким образом, переменные определяют значения, используемые при выполнении сце­нария, которые непосредственно ввел пользователь или которые были получены в результате выполнения запроса к базам данных.

Переменные следует использовать в сценарии, если предполагается, что данные, над которыми выполняются какие-либо операции, изменяются при каждом запуске сценария, либо даже во время выполнения одного сценария.

Переменная определяется именем, выбираемым произвольно, перед которым ставится знак доллара ($). Имя переменной может состоять из букв, цифр и символа подчеркивания (_). Имя переменной не может содержать пробелов или каких-либо других символов, и оно должно начинаться с буквы или символа подчеркивания. В следующем примере кода определяются некоторые допустимые переменные.

$а;

$a_longish_variable_name;

$_2453;

$sleepyZZZZ;

 

Не забывайте, что для окончания команды PHP-сценария используется точка с запятой (;). В предыдущем фрагменте кода точка с запятой не является частью имени переменной.

В переменной хранятся данные определенного типа. Она может содержать числа, строки символов, объекты, массивы или логические величины. Значение (или содержание) переменной можно изменить в любой момент.

Как видите, существует огромное количество имен переменных. Для объявления переменной нужно всего лишь включить ее в свой сценарий. Обычно в одной и той же команде объявляют переменную и присваивают ей значение, например:

$num1 = 8;

$num2 = 23;

В этих двух строках объявляются две переменные, и им назначаются значения с помощью оператора присваивания (=). После присвоения переменной определенного значения с ней можно работать точно так же, как если бы это было само значение. Другими словами,

print $num1;

эквивалентно

print 8;

При условии, что в переменной $num1 содержится число 8.

Типы данных

Для размещения в памяти данных разного типа требуется определенное место в памяти, а при обращении к ним из сценария они обрабатываются также по-разно­му. Поэтому в большинстве языков программирования требуется, чтобы програм­мист заранее объявил, какие типы данных будет содержать переменная. В отличие от них, язык РНР слабо типизирован. Это означает, что в нем типы данных определяются по мере присваивания их каждой переменной. Как известно, такой подход имееткак свои преимущества, так и определенные недостатки. С одной стороны, это означает, что переменную можно использовать достаточно гибко, сохраняя в одном месте сценария, скажем, строку, а в другом - целое число. С другой стороны, подобный подход может приводить к возникновению ошибок в больших сценариях. Программист может предполагать, что переменной присвоено значение одного типа, а на самом деле в ней содержится что-то совсем другое. Например, можно создать код, предназначенный для работы с переменной-массивом. Если вдруг окажется, что эта переменная вместо массива будет содержать числовое значение, то при попытке выполнить над этой переменной операции, определенные для массива, возникнет ошибка в сценарии.

В таблице 6.1 приведены стандартные типы данных РНР.


Таблица 6.1. Стандартные типы данных

Тип Пример Описание
Integer   Целое число
Double 3.234 Число с плавающей точкой
String "Привет" Строка символов
Boolean true Одно из логических значений true или false
Object Объект См. лекцию «Объекты»
Array Массив См. лекцию «Массивы»

 

В РНР также предусмотрено два специальных типа данных, перечисленных в табл. 6.2.

Таблица 6.2. Специальные типы данных

Тип Описание
Resource Ссылка на ресурс стороннего производителя (например, базу данных)
Null Неинициализированная переменная

 

Данные типа ресурс часто возвращаются функциями, работающими с внешними приложениями или файлами. Тип null резервируется для переменных, которые не были инициализированы (т.е. им еще не было присвоено значение).

Для определения типа любой переменной можно использовать встроенную функцию gettype(). Если поместить имя переменной в скобки при вызове функции, то она возвратит строку, описывающую тип этой переменной. В листинге 6.1 одной и той же переменной назначаются пять различных типов данных с последующей их проверкой с помощью функции gettype ().


Листинг 6.1. Отображение типа переменной

1: <!DOCTYPE html PUBLIC

2: "-//W3C//DTD XHTML 1.0 Strict//EN"

3: "http://www.w3.org/TR/xhtmll/DTD/xhtmll-strict.dtd">

4:

5: <html>

6: <head>

7: <title>Листинг 4.1. Отображение типа переменной /title>

8: </head>

9:

10: <body>

11: <div>

12: <?php

13: $testing; // Объявление переменной без присваивания

14: print gettype($testing); // NULL

15: print "<br />";

16:

17: $testing = 5;

18: print gettype($testing); // integer

19: print "<br />";

20:

21: $testing = "five";

22: print gettype($testing); // string

23: print "<br />";

24:

25: $testing = 5.0;

26: print gettype($testing); // double

27: print "<br />";

28:

29: $testing = true;

30: print gettype($testing); // boolean

31: print "<br />";

32:

33:?>

34: </div>

35: </body>

36: </html>

 

Этот сценарий выводит следующее:

Null

Integer

String

Double

Boolean

При объявлении в строке 13 переменной $testing, значение ей не присваи­вается. Таким образом, когда в строке 14 эта переменная используется впервые и функции gettype () для проверки ее типа, выводится строка " NULL". После этого мы назначаем переменной $testing несколько значений с помощью операто­ра присваивания = и каждый раз вызываем функцию gettype() для отображения ее типа. В строке 18 переменной $testing присваивается значение 5, соответствующее целому типу (integer). На самом деле это число может также являться вещественным числом. Поэтому в РНР целыми считаются числа без десятичной
точки. В строке 22 переменной $testing присваивается текстовая строка " five ", соответствующая строковому типу (string). При работе в сценариях со строками их следует всегда заключать в двойные (") или в одинарные кавычки ('). В строке 26 переменной $testing присваивается число с плавающей точкой 5.0, соответствующее типу double. В строке 30 переменной $testing присваивается значение true, соответствующее логическому типу (boolean). Заметьте, что в строке 30 переменной $testing можно присвоить одно из двух специальных значений: true или false.

Примечание. Существует разница между двойными и одинарными кавычками при ис­пользовании их со строками. Двойные кавычки позволяют анализировать переменные (т.е. подставлять вместо имен переменных их значения). Так, если заключить имя переменной в двойные кавычки, то интерпретатор РНР подставит вместо него значение переменной, например:

$name = "john";

print "hello, $name"; // hello, john

Если во второй строке этого сценария заменить двойные кавычки одинар­ными, то значение переменной $name не подставляется:

print 'hello, $name'; // hello, $name

Строки, заключенные в двойные кавычки, также анализируются на нали­чие управляющих символов. Такие символы начинаются с обратной косой черты (\), за которой следует какой-либо знак. Основными среди управля­ющих символов являются следующие:

\п — символ новой строки;

\ t — табуляция;

\" — символ двойной кавычки, находящийся в строке, заключенной в двойные кавычки;

\\ — обратная косая черта;

\$ — знак доллара (чтобы не путать его с признаком начала имени переменной).

На практике, если нужно отобразить строку точно так же, как она была введена, используйте одинарные кавычки. При этом сценарий будет рабо­тать быстрее, поскольку интерпретатору не придется анализировать эту строку. Если в строке предполагается использовать управляющие символы и выполняется подстановка значений переменных, следует пользоваться двойными кавычками.

Примечание. До РНР 4 логического типа данных не существовало. И хотя значение true использовалось, в действительности оно считалось константой с целочис­ленным значением 1. Оба типа - NULL и Resource - появились в РНР 4.

Отображение информации о типах с помощью функции var_dump ()

Функция gettype () - это специфичное средство. Она возвращает только строку, соответствующую типу переменной. В отличие от нее, функция var_dump () выводит как тип переменной, так и ее значение. Более того, для сложных типов переменных, таких как массивы или объекты, функция var_dump () выводит информацию обо всех типах, содержащихся в этой переменной, а также о самой этой переменной.

Таким образом, изменяя строку 18 в листинге 4.1, мы можем протестировать работу функции var_dump ():

$testing = 5; var_dump($testing);

Этот фрагмент дает следующий результат:

Int(5)

Такая запись говорит о том, что переменная $testing содержит целое число и что его значение равно 5. Отметим, что для функции var_dump () нет необходимости использовать ключевое слово print. Дело в том, что эта функция выводит свои результаты прямо в браузер или в командную строку.

Листинг 6.2. Изменение типа переменной с помощью функции settype()

1: <!DO TYPE HTML PUBLIC

2: "- //W3C//DTD XHTML 1.0 Strict//EN"

3: "http://www.w3.org/TR/xhtmll/DTD/xhtmll-strict.dtd">

4: <html>

5: <head>

6: <title>Листинг 4.2. Изменение, типа переменной

с помощью функции settype()</title>

7: </head>

8:

9: <body>

10: <div>

11: <?php

12: $undecided = 3.14;

13:

14: print gettype($undecided); // double

15: print " -- $undecided<br />"; // 3.14

16:

17: settype($undecided, string);

18: print gettype($undecided); // string

19: print " -- $undecided<br />"; // 3.14

20:

21: settype($undecided, int)

22: print gettype($undecided); // integer

23: print " -- $undecided<br />"; // 3

24:

25: settype($undecided, double);

26: print gettype($undecided); // double

27: print " -- $undecided<br />"; // 3.0

28:

29: settype($undecided, bool);

30: print gettype($undecided); // Boolean

31: print " -- $undecided<br />"; // 1

32:?>

33: </div>

34: </body>

35: </html>

 

Для того чтобы убедиться, что изменение типа произошло, вызывается функция gettype (), а затем выводится значение переменной $undecided в браузер. Когда мы в строке 21 конвертируем значение 3.14 в целое число, его дробная часть (число после десятичной точки) отбрасывается. По этой причине значение переменной $undecided будет равно 3 после повторного ее преобразования в тип double в строке 25. И, наконец, в строке 29 мы преобразуем переменную $undecided в логический тип.

При преобразовании в логический тип любое число, отличающееся от 0, автоматически становится равным true. При печати логического типа в РНР значение true соответствует 1,a false - пустой строке. Поэтому в строке 31 выводится значение переменной $undecided, равное 1.

Листинг 6.3. Явное приведение типов переменных

1: <!DO TYPE HTML PUBLIC

2: "- //W3C//DTD XHTML 1.0 Strict//EN"

3: "http://www.w3.org/TR/xhtmll/DTD/xhtmll-strict.dtd">

4:

5: <html>

6: <head>

7: <title>Листинг 4.3. Явное приведение типов переменных<.title>

8: </head>

9:

10: <body>

11: <div>

12: <?php

13: $undecided = 3.14;

14:

15: $holder = (double) $undecided;

16: print gettype($holder); // double

17: print " -- $holder<br />"; // 3.14

18:

19: $holder = (string) $undecided;

20: print gettype($holder); // string

21: print " -- $holder<br />"; // "3.14"

22:

23: $holder = (integer) $undecided;

24: print gettype($holder); // integer

25: print " -- $holder<br />"; // 3

26:

27: $holder = (boolean) $undecided;

28: print gettype($holder); // boolean

29: print " -- $holder<br />"; // 1

30:

31: print gettype($undecided); // double

32: print " -- $undecided<br />"; // 3.14

33:?>

34: </div>

35: </body>

36: </html>

 

В этом примере тип переменной $undecided не изменяется и повсюду в сценарии остается double. Мы проиллюстрировали это в строке 31, используя для вывода типа переменной $undecided функцию gettype ().

Фактически в результате операции приведения типа создается копия значения переменной $undecided указанного типа, которое затем присваивается новой переменной $holder в строках 15, 19, 23 и 27. Поскольку мы работаем с копией переменной $undecided, ее тип и значение никогда не изменяются, в отличие от строк 17, 21, 25 и 29 листинга 6.2.

Теперь, когда мы уже умеем изменять тип содержимого переменной, используя либо функцию settype(), либо операцию явного приведения типов, следует выяснить, для чего это может понадобиться. Конечно, явное приведение типов используется в реальных сценариях не часто, поскольку интерпретатор РНР автомати­ки выполняет нужное приведение, когда того требует контекст. Однако операция автоматического приведения типа является временной, тогда как в сценарии может понадобится, чтобы переменная хранила конкретный тип данных постоянно.

Числа, вводимые пользователем в поля формы HTML, передаются в сценарий в виде строк. Если попытаться сложить две строки, содержащие числа, РНР услужливо сначала преобразует эти строки в числа, а затем складывает их. Таким образом:

"30см" + "40см"

Даст в результате целое число 70. При приведении этих строк к целым числам интерпретатор РНР игнорирует нечисловые символы. Однако вам может потребоваться самостоятельно проанализировать введенные пользователем данные. Предположим, что пользователь получил приглашение ввести число. Эту ситуацию; можно смоделировать, объявляя переменную и присваивая ей некоторое значение, например:

$test = "30см";

Данная ситуация напоминает случай, когда пользователь ошибочно указал еди­ницу измерения после числа. Однако, как можно непосредственно убедиться, введенная пользователем информация корректно приводится к числовому виду:

$test = (integer) $test;

print "Вы ввели $test см";

Операторы и выражения

Теперь вы можете присваивать переменным разные значения и даже определять и изменять их типы. Однако любой язык программирования бесполезен, если в нем не будет предусмотрена возможность манипуляции хранимыми данными.Поэтому для создания нового значения в сценариях используются специальные символы - операторы. Величина, на которую действует оператор, называется операндом.

Оператор - это символ или набор специальных символов, который выполняет некоторое действие над указанными значениями, в результате чего, как правило, получается новое значение.

Операнд - это значение, используемое при выполнении оператора. Обычно один оператор имеет два операнда.

Теперь объединим два операнда с помощью оператора + и получим новое значение:

4 + 5

Цифры 4 и 5 - это операнды, на которые действует оператор сложения (+), что дает в результате число 9. Операторы почти всегда размещаются между двумя операндами, хотя далее в этой лекции приведено несколько исключений.

Объединение операндов с помощью оператора, дающее результат, называется выражением. И хотя в большинстве выражений чаще всего используются операторы по себе выражение не обязательно должно содержать какой-либо оператор. По сути, в РНР выражение определяется как нечто, что можно использовать как значение. К выражениям относятся целые константы, как, например, число 654, переменные (например, $user) и функции, такие как gettype(). Следовательно, (4+5) это тоже выражение, состоящее из двух выражений и оператора. Если выражение возвращает какое-либо значение, то говорят, что это значение вычисляется. Иными словами, когда вычислены все значения некоторого подвыражения, то это выражениеможет рассматриваться так, как если бы это значение было непосредственно указано в сценарии.

Выражением называют любое сочетание функций, значений и операторов, дающее в результате некоторое значение. На практике, если что-то можно использовать значение, то это что-то является выражением.

Теперь, когда мы разобрались с принципами, пришло время познакомиться с не­сколькими простыми операторами РНР.

Оператор присваивания

Вы уже встречались с оператором присваивания при инициализации переменных. Он состоит из единичного символа " = ". Оператор присваивания берет значение своего правого операнда и присваивает его левому операнду.

$name = " matt ";

Переменная $name теперь содержит строку " matt ". Интересно, что эта конструкция тоже является выражением. На первый взгляд может показаться, что оператор присваивания просто изменяет значение переменной $name и не возвращает никакого значения. Но, фактически, при использовании в выражении оператора присваивания всегда возвращается значение его правого операнда. Таким образом,

print ($name = "matt");

выводит в браузер строку "matt", а также присваивает значение "matt" переменной $name.

 

Арифметические операторы

Арифметические операторы делают в точности то, чего вы от них ожидаете. Они перечислены в таблице 4.5. Оператор сложения прибавляет правый операнд к левому, тогда как оператор вычитания вычитает из левого операнда правый. Оператор деления делит левый операнд на правый, а оператор умножения умножает левый операнд на правый. Оператор получения остатка от деления (деление по модулю) возвращает остаток от деления левого операнда на правый.

Таблица 6.5. Арифметические операторы

Оператор Название Пример Результат
+ Сложение 10 + 3  
- Вычитание 10-3  
/ Деление 10/3 3.333333333
* Умножение 10*3  
% Остаток от деления 10%3  

Оператор объединения

Оператором объединения (concatenation) служит единичная точка (.). При его использовании подразумевается, что оба операнда являются строками. Он добавляет содержимое правого операнда к левому. Таким образом,

"Здравствуй,". " мир!" эквивалентно

"Здравствуй, мир!"

Независимо от типа данных операндов они считаются строками и результатом операции всегда есть строка. Оператор объединения часто используется, когда нужно добавить некоторую строку к результатам вычисления выражения. Вот пример:

$centimeters = 212;

print "Ширина равна ". ($centimeters/100). " метров";

Таблица 6.6. Некоторые комбинированные операторы присваивания

Оператор Пример Эквивалент
+= $х += 5 $х = $х + 5
-= $х -= 5 $х = $х - 5
/= $х /= 5 $х = $х / 5
*= $х *= 5 $х = $х * 5
%= $х %= 5 $х = $х % 5
.= $х.= " test" $х = $х. " test"

Каждый из примеров в таблице 6.6 изменяет значение переменной , используя значение правого операнда.

Операторы сравнения

Операторы сравнения проверяют значения своих операндов. Они возвращают логическое значение true, если проверка прошла успешно, и false в противном случае. Этот вид выражений особенно полезен в управляющих структурах, таких как операторы if и while.

Например, чтобы проверить, что значение переменной меньше 5, используется оператор меньше:

$х < 5

Если равно 3, это выражение эквивалентно true. Если равно 7, то вычисление этого выражения даст false.

В таблице 6.7 перечислены операторы сравнения РНР.


Таблица 6.7. Операторы сравнения

Оператор Название Возвращает true, если … Пример Результат
= = Равенство Левая часть равна правой $х = = 5 false
! = Неравенство Левая часть не равна правой $х! = 5 true
= = = Идентичность Левая часть равна правой и обе они одного типа $х = = = 5 false
> Больше Левая часть больше правой $х > 5 false
>= Больше или равно Левая часть больше или равна правой $х >= 4 true
< Меньше Левая часть меньше правой $х < 4 false
<= Меньше или равно Левая часть меньше или равна правой $х <= 4 true

 

Эти операторы чаще всего используются с целыми числами или с числами с плавающей точкой, хотя оператор равенства используется и для сравнения строк.

Примечание. Начиная с РНР 5 оператор идентичности = = = можно использовать для проверки того, содержат ли две переменные один и тот же объект. В РНР 4 оператор = = = реализован несколько иначе. Он сравнивает свойства двухобъектов и возвращает true, если все свойства совпадают и оба объекта являются экземплярами одного класса. Подобная работа оператора идентичности в корне отличает две версии РНР при проверке двух различных объектов одного типа, содержащих один и тот же набор свойств. В РНР 4 такие объекты считаются эквивалентными, в то время как в РНР 5 эти объекты друг другу не соответствуют.


Таблица 6.8. Логические операторы

Оператор Название Возвращает true, если … Пример Результат
||или or ИЛИ Левая или правая часть равна true true || false   true
xor Исключающее ИЛИ Левая или правая часть равна true, но не обе одновременно true xor true false
&& или and И Левая и правая часть равна true true && false false
! НЕ Единственный операнд не равен true ! true false

 

Почему предусмотрены две версии операторов И и ИЛИ? Это связано с приоритетом операторов, о чем мы поговорим немного позже.


Приоритет операторов

При использовании операторов интерпретатор РНР обычно вычисляет значения выражений слева направо. Однако для сложных выражений, в которых используются несколько операторов, все немного усложняется. Рассмотрим сначала простой случай:

4 + 5

Здесь все очевидно: интерпретатор РНР просто добавляет 5 к 4. А как насчет следующего фрагмента?

4 + 5*2

Здесь ситуация неоднозначна. Эта запись может означать, что сначала вычисляется сумма 4 и 5, а затем полученный результат умножается на 2, что дает в результате 18. Она также может означать, что сначала 5 умножается на 2 и к полученному результату добавляется 4, что дает в результате 14. Если бы операторы просто выполнялись слева направо, то справедлив был бы первый результат. На деле же в РНР всем операторам назначен различный приоритет. Из-за того, что оператор умножения имеет более высокий приоритет, чем оператор сложения, верным буде второй результат.

Заставить интерпретатор РНР выполнить сложение перед умножением можно с помощью скобок:

(4 + 5)*2

Какой бы ни был приоритет операторов в сложном выражении, лучше использовать круглые скобки, чтобы сделать код более ясным и избежать скрытых ошибок. В таблице 6.9 перечислены операторы, описанные на этом занятии, в порядке убыва­нии приоритета.

Таблица 6.9. Порядок выполнения некоторых операторов РНР

Оператор
++ - - (приведение типа)
/ * %
* -
< <= => >
= = = = =!=
&&
||
= += -= /=*= %=.=
and
xor
or

 

Как видите, оператор or имеет более низкий приоритет, чем ||, a and – более низкий, чем &&. Это позволяет использовать логические операторы более низкого приоритета для изменения способа вычисления сложного логического выражения. Однако подобный подход не всегда хорош. Следующие два выражения эквивалентны, но второе намного легче читать:

$x and $y || $z

$x && ($y || $z)

Как видите приоритет операторов является единственной причиной, по которой в РНР ввели операторы && и and. To же самое справедливо и относительно операторов || и or. Однако чтобы сделать код более понятным и уменьшить количество ошибок из-за неправильной трактовки приоритета выполнения операторов, рекомендуется в сложных выражениях использовать круглые скобки.

Константы

Переменные являются очень удобным средством для хранения данных, потому что в любой момент можно изменить их значение, а также тип сохраняемых данных. Однако если предполагается, что некоторые значения не будут изменяться на протяжении всей работы сценария, удобнее определить константу (или постоянную величину. Для создания константы используется функция РНР define(). После определения значение константы изменить невозможно. При вызове функции define () имя константы и значение, которое ей нужно присвоить, следует поместить в круглые скобки и разделить запятой, например:

define("ИМЯ_КОНСТАНТЫ", 42);

Вновь создаваемой константе можно присвоить либо числовое значение, либо строку символов. По соглашению имя константы пишется прописными буквами. Доступ к значению константы выполняется по ее имени. Никаких знаков доллара в имени константы использовать не нужно. В листинге 6.4 показан пример определения и использования констант.

Листинг6.4. Определение и использование константы

1: <!DOCTYPE HTML PUBLIC

2: "-//W3C//DTD XHTML 1.0 Strict//EN"

3: "http://www.w3.org/TR/xhtmll/DTD/xhtmll-strict.dtd">

4:

5: <html>

6: <head>

7: <title>Листинг 4.4. Определение и использование

константы </title>

8: </head>
9:

10: <body>

11: <div>

12: <?php

13: define ("USER", "Сергей");

14: print "Добро пожаловать, ". USER;

15:?>

16: </div>

17: </body>

18: </html>

 

Обратите внимание на строку 14 этого сценария. В ней использован оператор объединения для добавления значения, содержащегося в константе, к строке "Добро пожаловать, ". Дело в том, что интерпретатор РНР не различает константы и строки, находящиеся в кавычках.

У функции define () существует и третий (необязательный) параметр, определяющий, должно ли имя константы зависеть от регистра букв. По умолчанию константы чувствительны к регистру, но, передавая значение true в функцию def ine() можно изменить это соглашение. Таким образом, если определить константу USER так:

define("USER", "Сергей", true);

то все приведенные ниже выражения эквиваленты.

print User;

print UsEr;

print USER

Поступая подобным образом, вы облегчите жизнь и себе и другим людям, которые впоследствии будут сопровождать ваш сценарий. Им не нужно будет точно запоминать регистр символов для констант, которые были определены в сценарии. С другой стороны, сам факт, что часть констант зависит от регистра символов, а часть - нет, может сбить с толку любого нормального программиста. Поэтому, если у вас нет веских причин поступать иначе, старайтесь всегда определять име­на констант в верхнем регистре и делать их зависимыми от регистра символов. Подобное соглашение по именованию констант запомнить легче всего.

Предопределенные константы

 

В РНР автоматически определяются несколько встроенных констант, которые вы можете использовать в собственных сценариях. Например, константа _File_ содержит имя файла, с которым в настоящий момент работает интерпретатор РНР, а _LINE_ - номер текущей строки этого файла. Эти константы полезны для формирования сообщений об ошибках. Также с помощью константы php_version можно выяснить, какая версия интерпретатора РНР обрабатывает ваш сценарий. Тем самым можно ограничить выполнение сценария определенными версиями интерпретатора РНР.

 

Резюме

На этой лекции были рассмотрены основные свойства языка РНР. Вы изучили переменные и способы присваивания им значений с помощью оператора присваивания; ознакомились с операторами и узнали, как использовать их в выражениях. Наконец, вы узнали, как определять константы и использовать их в сценариях.

Вопросы и ответы

УПРАЖНЕНИЯ

1. Создайте сценарий, содержащий, по меньшей мере, пять различных пере­менных. Присвойте им значения различного типа и используйте функцию gettype(), чтобы отобразить каждый тип в окне браузера.

2. Присвойте значения двум переменным. Используйте оператор сравнения для проверки, является ли первое значение:

• таким же, как второе;

• меньше второго;

• больше второго;

• меньше второго или равным ему.

Отобразите результат каждой проверки в окне браузера. Измените значения, присвоенные тестовым переменным, и снова запустите сценарий.

 

ТЕМА 6. ОПИСАНИЕ ЯЗЫКА. СТРОИТЕЛЬНЫЕ БЛОКИ

1) Переменные

2) Типы переменных

3) Операторы и выражения

4) Константы

Переменные

Переменная - это специальный контейнер, который содержит значение согласноопределению пользователя. Переменные являются основой программирования. Без них пришлось бы "жестко" закодировать все числовые значения в своих сценариях. Например, при сложении двух чисел и печати результата получается что-то полезное:

print (2+4);

Однако этот сценарий полезен только для тех, кто хочет знать сумму чисел 2 и 4. Чтобы выйти из положения, можно написать сценарий нахождения суммы двух других чисел, скажем 3 и 5. Этот подход к программированию явно абсурден. Переменные дают возможность создавать шаблоны для операций (сложение двух чисел, например), не заботясь о том, какие именно значения они содержат. Таким образом, переменные определяют значения, используемые при выполнении сце­нария, которые непосредственно ввел пользователь или которые были получены в результате выполнения запроса к базам данных.

Переменные следует использовать в сценарии, если предполагается, что данные, над которыми выполняются какие-либо операции, изменяются при каждом запуске сценария, либо даже во время выполнения одного сценария.

Переменная определяется именем, выбираемым произвольно, перед которым ставится знак доллара ($). Имя переменной может состоять из букв, цифр и символа подчеркивания (_). Имя переменной не может содержать пробелов или каких-либо других символов, и оно должно начинаться с буквы или символа подчеркивания. В следующем примере кода определяются некоторые допустимые переменные.

$а;

$a_longish_variable_name;

$_2453;

$sleepyZZZZ;

 

Не забывайте, что для окончания команды PHP-сценария используется точка с запятой (;). В предыдущем фрагменте кода точка с запятой не является частью имени переменной.

В переменной хранятся данные определенного типа. Она может содержать числа, строки символов, объекты, массивы или логические величины. Значение (или содержание) переменной можно изменить в любой момент.

Как видите, существует огромное количество имен переменных. Для объявления переменной нужно всего лишь включить ее в свой сценарий. Обычно в одной и той же команде объявляют переменную и присваивают ей значение, например:

$num1 = 8;

$num2 = 23;

В этих двух строках объявляются две переменные, и им назначаются значения с помощью оператора присваивания (=). После присвоения переменной определенного значения с ней можно работать точно так же, как если бы это было само значение. Другими словами,

print $num1;

эквивалентно

print 8;

При условии, что в переменной $num1 содержится число 8.

Типы данных

Для размещения в памяти данных разного типа требуется определенное место в памяти, а при обращении к ним из сценария они обрабатываются также по-разно­му. Поэтому в большинстве языков программирования требуется, чтобы програм­мист заранее объявил, какие типы данных будет содержать переменная. В отличие от них, язык РНР слабо типизирован. Это означает, что в нем типы данных определяются по мере присваивания их каждой переменной. Как известно, такой подход имееткак свои преимущества, так и определенные недостатки. С одной стороны, это означает, что переменную можно использовать достаточно гибко, сохраняя в одном месте сценария, скажем, строку, а в другом - целое число. С другой стороны, подобный подход может приводить к возникновению ошибок в больших сценариях. Программист может предполагать, что переменной присвоено значение одного типа, а на самом деле в ней содержится что-то совсем другое. Например, можно создать код, предназначенный для работы с переменной-массивом. Если вдруг окажется, что эта переменная вместо массива будет содержать числовое значение, то при попытке выполнить над этой переменной операции, определенные для массива, возникнет ошибка в сценарии.

В таблице 6.1 приведены стандартные типы данных РНР.


Таблица 6.1. Стандартные типы данных

Тип Пример Описание
Integer   Целое число
Double 3.234 Число с плавающей точкой
String "Привет" Строка символов
Boolean true Одно из логических значений true или false
Object Объект См. лекцию «Объекты»
Array Массив См. лекцию «Массивы»

 

В РНР также предусмотрено два специальных типа данных, перечисленных в табл. 6.2.

Таблица 6.2. Специальн



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 210; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.14.219 (0.221 с.)