Типы данных в РНР. Преобразование типов
Стр 1 из 3Следующая ⇒ PHP программы
Программы PHP могут выполняться двумя способами: как сценарное приложение Web-сервером и как консольные программы. Поскольку, нашей задачей является программирование web-приложений, мы преимущественно будем рассматривать первый способ. Дело в том, что PHP, как правило, используется сугубо для программирования приложений, связанных с Интернетом. Однако, PHP можно еще использовать в качестве интерпретатора командной строки, в основном в *nix-системах. Последнее возможно при помощи CORBA и COM интерфейсов, а также при помощи расширения PHP-GTK. При таком использовании PHP возможно решение следующих задач: создание приложений интерактивной командной строки; создание кросс-платформенных GUI приложений при помощи библиотеки PHP-GTK; автоматизация некоторых задач под Windows и Linux Рассмотрим процесс выполнения php-сценария при обращении броузера к серверу. Итак, вначале броузер запрашивает страницу с расширением.php, после чего web-сервер пропускает программу через машину PHP и выдаёт результат в виде html-кода. Причем, если взять стандартную страницу HTML, изменить расширение на.php и пропустить её через машину PHP, последняя просто перешлёт её пользователю без изменений. Чтобы включить в этот файл команды PHP, необходимо заключить команды PHP в специальные теги, которых различают 4 вида (они эквивалентны и можно использовать любые): Инструкция обработки XML: <?php ... ?> Инструкция обработки SGML: <? ... ?> Инструкция обработки сценариев HTML: <script language = "php"> ... </script> Инструкция в стиле ASP: <% ... %>
Мы будем придерживаться стиля XML или SGML. Вообще говоря, внутри какого-либо блока кода можно выйти из PHP, при условии, что дальше мы войдем в него снова и закончим код (Подробнее об этом смотрите в гл.2.). Т.е., возможна следующая конструкция:
<? if(5<3){ echo("<p>Hello, world!<p>"); ?> <p>Hello!</p> // эта строка не интерпретируется как код PHP // и выводится только если блок кода выполняется <? echo("<p>Hello, world!<p>"); } ?>
Команда echo в PHP применяется для вывода фактически всего, что встречается на web-страницах (текст, разметку HTML, числа). Смысл ее действия, мы думаем, понятен из приведенного примера. Комментарии PHP предоставляет несколько методов для вставки комментариев. Проще всего пользоваться двойным слэшем в стиле языка С++ (//), после чего PHP машина игнорирует все, что расположено до конца строки. Также можно пользоваться многострочными комментариями в стиле С (/*…*/). Для однострочных комментариев можно еще пользоваться символом решетки (#) (комментарий скриптовых языков UNIX). <php echo("<p>Hello</p>"); // комментарий echo("<p>Hello</p>"); # комментарий /* и это тоже комментарии */ ?> Следует помнить о том, что стили комментариев PHP действуют только внутри ограничителей PHP. Если PHP встретит эти символы комментариев вне ограничителей, то они, как и любой текст, будут помещены на html-страницу. Например: <php echo("<p>Hello</p>"); // нормальный комментарий ?> // а вот этот комментарий отобразиться броузером. <!-- Комментарий HTML. Будет виден в исходном коде HTML, но не в браузере -->
Заметим, что комментарии можно вставлять не только после конца оператора, а, например, и вот так: <? $a = "Hello, world"; echo strstr($a,"H"); // эту функцию мы рассмотрим позднее ?> Переменные
В РНР переменные начинаются со знака доллара ($), за которым может следовать любое количество буквенно-цифровых символов и символов подчеркивания, но первый символ не может быть цифрой. Таким образом, допустимы следующие имена переменных: $n, $n1, $user_func_5 и т. д. В отличие от ключевых слов, имена пе-ременных в PHP чувствительны к регистру, т. е. переменные $user, $User и $USER являются различными.
<?php $user = "Владимир"; $User = "Дмитрий"; $USER = "Юрий"; echo $user; // Владимир echo $User; // Дмитрий echo $USER; // Юрий ?> При объявлении переменных в РНР не требуется явно указывать тип переменной, при этом одна и та же переменная может иметь на протяжении программы разные типы. Как видно из предыдущего листинга, для присвоения значения переменной необходимо воспользоваться оператором присвоения =, который позволяет инициализировать переменную. При объявлении числовых значений в качестве разделителя целого значения и дробной части выступает точка.
<?php $number = 1; $var = 3.14; ?> Внешние переменные
После того, как запрос клиента проанализирован веб-сервером и передан РНР машине, последняя устанавливает ряд переменных, которые содержат данные, относящиеся к запросу и доступны все время его выполнения. Сначала РНР извлекает переменные окружения операционной системы и создает переменные с теми же именами и значениями в окружении сценария РНР для того чтобы сценариям, расположенным на сервере были доступны особенности системы клиента. Эти переменные помещаются в ассоциативный массив $_SERVER (содержимое этого массива можно всегда посмотреть, воспользовавшись функцией print_r($_SERVER) или phpinfo()). Затем РНР создает группу GET-переменных, которые создаются при анализе строки запроса. Строка запроса хранится в переменной $_SERVER['QUERY_STRING'] и представляет собой информацию, следующую за символом "?" в запрошенном URL. РНР разбивает строку запроса по символам & на отдельные элементы, а затем ищет в каждом из этих элементов знак "=". Если знак "=" найден, то создается переменная с именем из символов, стоящих слева от знака равенства. Рассмотрим следующую форму:
<form action = "http://localhost/PHP/test.php" method="get"> HDD: <input type="text" name="HDD"/><br> CDROM: <input type="text" name="CDROM"/><br> <input type="submit"/> </form> Если Вы в этой форме в строке HDD наберете, к примеру, "Maxtor", а в строке CDROM "Nec", то она сгенерирует следующую форму запроса: http://localhost/PHP/test.php?HDD=Maxtor&CDROM=Nec
В нашем случае РНР создаст следующие переменные: $_GET['HDD'] = "Maxtor" и $_GET['CDROM'] = "Nec". Вы можете работать с этими переменными из Вашего скрипта (у нас – test.php) как с обычными переменными. В нашем случае они просто выводятся на экран: <? echo("<p>HDD is $_GET[HDD]</p>"); echo("<p>CDROM is $_GET[CDROM]</p>"); ?> Если запрос страницы выполняется при помощи метода POST, то появляется группа POST-переменных, которые интерпретируются также и помещаются в массив $_POST. Константы Константы объявляются в РНР при помощи функции define(): define(CONSTANT, value) Первый параметр этой функции – имя константы, второй – её значение. При использовании константы на неё ссылаются по имени: <? define(CONSTANT1,15); define(CONSTANT2,"\x20"); // код пробела define(CONSTANT3,"Hello"); echo(CONSTANT1); echo(CONSTANT2); echo(CONSTANT3); ?> По традиции имена констант пишут буквами верхнего регистра. И хотя это только традиция, мы Вам рекомендуем ей следовать, поскольку плохие программисты получаются в том числе и из тех, кто не следовал хорошим традициям J. Существует функция defined(), которая проверяет, определена ли константа: <? define(CONSTANT,"Hello"); if(defined("CONSTANT")) { echo("<p>CONSTANT is defined</p>"); } ?> Типы данных в РНР. Преобразование типов Как уже было сказано, PHP предоставляет определенную гибкость в отношении типов переменных, т.е. с одной и той же переменной на протяжении программы можно работать и как со строкой, и как с числом. Однако, несмотря на это в РНР существуют набор основных типов данных, которые могут явно указываться при работе с переменными: integer; string; boolean; double; array; object;
Есть функция gettype(), возвращающая тип, который РНР назначил переменной: <? $var = "5"; $var1 = 5; echo(gettype($var)); echo "<br>"; echo(gettype($var1)); ?> В первом случае РНР вернет string, во втором integer. Существует также функция settype(), которая явно устанавливает тип: <? $var = "5"; echo(gettype($var)); settype($var,integer); echo "<br>"; echo(gettype($var)); ?> Выполнение этого фрагмента кода приведет к такому же результату, как и предыдущего. Кроме функции settype() преобразование типов в РНР можно осуществлять при помощи операторов преобразования типов. Преобразование типов осуществляется путем указания перед переменной ее нового типа, взятого в скобки:
$var = (int)$var; Соответственно, выполнение следующего кода приведет к тому, что РНР вернет integer: <? $var = "5"; // тип string $var = (int)$var; // преобразуем в int echo(gettype($var)); ?> Операторы Арифметические операторы+ Сложение - Вычитание * Умножение / Деление % Вычисление остатка по модулю (к примеру: 5 % 2=1) Поразрядные операторы Эта группа операторов работает с битовыми представлениями значений целочисленных операндов. В основном эти операторы применяются для создания набора булевых флагов. В наших упражнениях мы будем использовать эти операторы очень редко, однако на всякий случай ниже приведен пример с использованием этих операторов. & Поразрядная конъюнкция (AND) | Поразрядная дизъюнкция (OR) ^ Поразрядное исключающее ИЛИ (XOR) ~ Поразрядное отрицание (NOT) << Сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда >> Сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда Пример: <?php echo(4<<2); // равно 16 echo"<br>"; echo(5>>1); // равно 2 echo"<br>"; echo(6&5); // равно 4 echo"<br>"; echo(6|5); // равно 7 echo"<br>"; echo(6^5); // равно 3 >? Разберем первый пример. Двоичный код для 4 равен 100, при сдвиге влево на 2 разряда код 100 становится равным 10000, что соответствует десятичному значению 16. Остальные примеры могут быть разобраны аналогично. Обратим внимание на то, что сдвиг влево на n позиций эквивалентен умножению на 2n, а сдвиг вправо уменьшает соответствующее значение в 2n раз с отбрасыванием дробной части результата (поэтому 5>>1 равно 2). Основное назначение этих операторов – быстрые вычисления. Так как их поддержка осуществляется на аппаратном уровне (процессор), алгоритмы, выполненные с использованием данных операторов получаются очень производительными. Логические операторы
Операторы этой группы, в отличие от поразрядных, работают с логическими переменными (boolean) и интенсивно используются в управляющих конструкциях: циклы и условия. Логические переменные, или более правильно, переменные типа Boolean имеют лишь два значения: true(истина) и false(ложь). В выражениях true и false можно заменить на 1(любое отличное от 0 число) и 0, соответственно. Возможность замены true и false на 1 и 0 – это «наследство» языка С, в котором не было специальных переменных true и false.
Логически операторы для переменных типа Boolean выполняют роль операторов сложения, вычитания для обычных переменных. Рассмотрим несколько примеров, если их смысл Вам не очень понятен – не расстраивайтесь, просто вернитесь сюда, прочитав главу 2. Оператор if(cond) проверяет условие cond, если его значение true – выполняется код в фигурных скобках, следующий за if, если false – код после оператора else. Если cond равен false – всё наоборот. <?php $flag = true; // Истина if($flag) { echo "<p>Переменная flag имеет значение true</p>"; } else { echo "<p>Переменная flag имеет значение false</p>"; } ?> Результаты работы скрипта выглядят следующим образом: Переменная flag имеет значение true
Если теперь заменить строчку $flag = true; // Истина на $flag = false; // Ложь
Результат, выдаваемый тэгом измениться: Переменная flag имеет значение false
Т.е. мы зашли в блок else, так как в операторе if условие ложно.
Когда условие одно, как видите, всё просто. Когда условий больше - в дело вступают логические операторы: <?php $flag1 = true; // Истина $flag2 = true; // Истина if($flag1 && $flag2) // И $flag1 И $flag2 истины { echo "<p>Условие: true (Оба флага истины)</p>"; // Да } else { echo "<p>Условие: false (Один из флагов ложен)</p>"; // Нет, один или оба ложны } ?>
Этот скрипт выведет: Условие: true (Оба флага истины). Если хотя бы один из операторов окажется равным false (или оба сразу) – будет выведено: Условие: false (Один из флагов ложен). Обязательно попробуйте поиграть с условиями: если вы не будете разбираться в условных операторах – Вы никогда не будете хорошим программистом ни на одном языке программирования. Если Вы считаете, что Вам не нужны условные операторы – Вам не нужен язык программирования. Заменим && (И) на || (ИЛИ) <?php $flag1 = true; // Истина $flag2 = false; // Ложь if($flag1 || $flag2) // Хоть кто-то из двух флагов($flag1 $flag2) истинен { echo "<p>Условие: true (Один из флагов истин)</p>"; // Да } else { echo "<p>Условие: false (Оба флага ложны)</p>"; // Нет оба имеют значение false } ?> Опять получаем: Условие: true. Для И и ИЛИ, как видим, возможны два варианта операторов, причем эти операторы с разными приоритетами. Приоритетность выполнения логических операторов: or > xor > and > || > && >! Иногда в условиях удобно использовать скобки для явного задания приоретета: <?php $flag1 = true; $flag2 = true; $flag3 = false; if($flag1 && $flag2 || $flag3) { echo "<p>Условие истинно<p>"; } else { echo "<p>Условие ложно<p>"; } ?> Результатом будет вывод фразы «Условие истинно», так как согласно приоритету исполнения сначала выполняется оператор &&, так как оба флага равны true – возвращается true, затем это выражение сравнивается с $flag3 (true || $flag3) – что возращает тоже true, так как одно из сравниваемых равно true. Если же мы запишем <?php $flag1 = true; $flag2 = true; $flag3 = false; if($flag1 && ($flag2 && $flag3)) { echo "<p>Условие истинно<p>"; } else { echo "<p>Условие ложно<p>"; } ?> результатом будет «Условие ложно». Вообще программисты не любят запоминать порядок приоритетов, поэтому для того чтобы Ваш код легко читался (в том числе и Вами) лучше всегда использовать скобки. Т.е. в первом скрипте лучше записать if(($flag1 && $flag2) || $flag3) – тогда сразу становиться понятно, что имеется ввиду. Иногда нужно проверить условие безальтернативно, например, на ложность или истинность. Допустим, функция (func()) возвращает истину или ложь и в зависимости от этого нужно вывести на страничку те или иные теги. Например, функция mysql_query($query) – возвращает true если запрос к базе данных mySQL, размещённый в строке $query успешно выполнился и false – в противном случае. Если Вам нужно среагировать только на удачное обращение, Вы можете записать: <?php if(mysql_query($query)) { echo "<p>Данные успешно занесены в базу данных.<p>"; } ?>
Если Вам нужно среагировать только на не удачные обращения, Вы, конечно, можете записать: <?php if(mysql_query($query)) {} else { echo"<p>Данные не были занесены в базу данных.<p>"; } ?> Но это не элегантный, запутывающий способ – здесь самое время воспользоваться оператором отрицания:!, применение которого к переменной меняет её значение с true на false, а false на true: <?php if(!mysql_query($query)) { echo"<p>Данные не были занесены в базу данных.<p>"; } ?>
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|