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



ЗНАЕТЕ ЛИ ВЫ?

Проверка специфических типов данных

Поиск

 

Функция gettype () полезна при отладке сценария, потому что она позволяет точно узнать тип любой переменной. Однако часто бывает нужно только проверить, содержит ли переменная значение некоторого типа. В РНР для этого предусмотрен набор специальных функций, соответствующих каждому типу данных. Этим функциям передаются имена переменных или значения, а возвращают они значение логического (boolean) типа (true или f alse). Эти функции перечислены в таблице 6.3.

 

Таблица 6.3

Функция Описание
is_array() Возвращает true, если аргумент массив (array)
is_bool() Возвращает true, если аргумент логического типа (boolean)
is_double() Возвращает true, если аргумент вещественное число двойной точности (double)
is_int() Возвращает true, если аргумент целое число (integer)
is_object() Возвращает true, если аргумент объект (object)
is_string() Возвращает true, если аргумент строка (string)
is_null() Возвращает true, если аргумент неинициализирован (null)
is_resource() Возвращает true, если аргумент ресурс (resource)

 

Все перечисленные выше функции часто используются вместе с оператором if для проверки типов переменных, передаваемых функциям или методам объекта.

Изменение типа с помощью функции settype()

Для изменения типа переменной в РНР предусмотрена функция settype (). При вызове функции settype() следует поместить в скобки имя переменной, тип которой нужно изменить, а также описание ее нового типа и разделить их запятыми. В листинге 4.2 показан пример преобразования значения 3.14 типа double в четыре других типа, рассматриваемых на этой лекции.

Листинг 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.

Изменение типа с помощью операции приведения

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

Принципиальное отличие между функцией settype() и явным приведением типа (cast) состоит в том, что вторая операция создает копию исходной переменной заданного типа, не изменяя при этом типа исходной переменной. Это продемонстрировано в листинге 4.3.

Листинг 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 см";



Поделиться:


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

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