Сетевая библиотекаСетевая библиотека

ЯССГ лабораторная работа 2

Дата публикации: 04.01.2019
Тип: Текстовые документы DOC
Размер: 1.42 Мбайт
Идентификатор документа: -176188017_487876233
Файлы этого типа можно открыть с помощью программы:
Microsoft Word из пакета Microsoft Office
Для скачивания файла Вам необходимо подтвердить, что Вы не робот

Предпросмотр документа

Не то что нужно?


Вернуться к поиску
Содержание документа
Лабораторная работа №2
Введение в язык PHP

Теоретические сведения
PHP (англ. Preprocessor оf Hypertext, произносится "пи-эйч-пи") представляет собой скриптовый язык программирования, созданный для реализации серверной части web-приложений, в частности, для генерации web-страниц, написания web-сервисов и организации работы с базами данных.
Основы PHP, создание и выполнение простейших скриптов

Первая PHP-программа
Рассмотрим пример:


Пример


echo "

Привет, я – скрипт PHP!

";
?>



Это простой HTML-файл, в которыйвстроенс помощью специальных тегов код, написанный на языкеPHP.
PHP-скрипты– этопрограммы, которые выполняются и обрабатываютсясервером.
PHP-скриптывстраиваются в HTML-код несколькими способами. Один из них – с помощью открывающего тега. Такого вида специальные теги позволяют переключаться между режимами HTML иPHP. Этот синтаксис наиболее предпочтителен, поскольку позволяет задействоватьPHPвXML-совместимыхпрограммах (например, написанных на языке XHTML), но тем не менее можно использовать следующие альтернативные варианты (командаecho "Some text"; выводит на экран текст "Some text".):


<% echo "Можно использовать теги в стиле ASP "; %>
Первый из этих способов не всегда доступен. Чтобы им пользоваться, нужно включить короткие теги либо с помощью функцииshort_tags()дляPHP3, либо включивустановкуshort_open_tag в конфигурационном файлеPHP, либо скомпилировавPHPс параметром --enable-short-tags. Даже если это включено по умолчанию вphp.ini-dist, использование коротких тегов не рекомендуется. Второй способ аналогичен вставке, например, JavaScript-кода и использует для этого соответствующий html тег. Поэтому использовать его можно всегда, но это делается редко из-за его громоздкости. Третий способ можно применить, только если теги в стиле ASP были включены, используя конфигурационнуюустановкуasp_tags.
КогдаPHPобрабатывает файл, он просто передает его текст, пока не встретит один из перечисленных специальных тегов, который сообщает ему о необходимости начать интерпретацию текста как кодаPHP. Затем он выполняет весь найденный код до закрывающего тега, говорящего интерпретатору, что далее снова идет просто текст. Этот механизм позволяет внедрятьPHP-код в HTML – все за пределами теговPHPостается неизменным, тогда как внутри интерпретируется как код.
Для того чтобы отправить php-файл на обработкусерверу, нужно в строке браузера набрать путь к этому файлу насервере.Скриптыphpдолжны располагаться там, где разрешен доступ через www, например там же, где лежит домашняя страничка. Еслиphp-файл лежит на локальной машине, то его можно обработать с помощьюинтерпретаторакомандной строки.

Основной синтаксис
Программа на PHP (да и на любом другом языке программирования) – это набор команд (инструкций). Обработчику программы (парсеру) необходимо как-то отличать одну команду от другой. Для этого используются специальные символы – разделители. В PHP инструкции разделяются так же, как и в Cи или Perl, – каждое выражение заканчивается точкой с запятой.
Закрывающий тег "?>" также подразумевает конец инструкции, поэтому перед ним точку с запятой не ставят. Например, два следующих фрагмента кода эквивалентны:
echo "Hello, world!"; // точка с запятой в конце команды обязательна
?>



Комментарии
Часто при написании программ возникает необходимость делать какие-либокомментариик коду, которые никак не влияют на сам код, а только поясняют его. PHP поддерживает несколько видовкомментариев: символы//и#обозначают начало однострочных комментариев, /*и*/– соответственно начало и конец многострочныхкомментариев.
echo "Меня зовут Вася"; // Это однострочный комментарий
echo "Фамилия моя Петров"; /* Это многострочный комментарий.
Здесь можно написать несколько строк.
При исполнении программы все, что
находится здесь (закомментировано),
будет игнорировано. */
echo "Я изучаю PHP "; # Это комментарий в стиле
# оболочки Unix
?>
Переменные, константы и операторы
Важным элементом каждого языка являютсяпеременные,константыиоператоры, применяемые к этим переменнымиконстантам. Рассмотрим, как выделяются и обрабатываются эти элементы в PHP.
Переменные
Переменнаяв PHP обозначается знаком доллара, за которым следует ее имя. Например:
$my_var
Имяпеременнойчувствительно к регистру, т.е.переменные$my_varи$My_varразличны.
Именапеременныхсоответствуют тем же правилам, что и остальные наименования в PHP: правильное имя переменнойдолжно начинаться с буквы или символа подчеркивания с последующими в любом количестве буквами, цифрами или символами подчеркивания.
Начиная с PHP 4, появился еще один способ присвоения значенийпеременным: присвоение по ссылке. Для того, чтобы присвоить значение переменнойпо ссылке, это значение должно иметь имя, т.е. оно должно быть представлено какой-либопеременной. Чтобы указать, что значение однойпеременнойприсваивается другойпеременнойпо ссылке, нужно перед именем первойпеременнойпоставить знак амперсанд&.
Пример:
$first = ' Text '; // Присваиваем $first значение ' Text '
$second = &$first;
/* Делаем ссылку на $first через $second.
Теперь значения этих переменных будут всегда совпадать */
// Изменим значение $first
// на ' New text '
$first = ' New text ';
echo "Переменная с именем first " . "равна $first
";
// выведем значения обеих переменных
echo "Переменная с именем second " . "равна $second";
?>

Этот скрипт выведет следующее:
Переменная с именем first равна New text.
Переменная с именем second равна New text.
То есть вместе спеременной$firstизменилась ипеременная$second.

Константы
Для хранения постоянных величин, т.е. таких величин, значение которых не меняется в ходе выполнения скрипта, используютсяконстанты. Уконстантынет приставки в виде знака доллара и ее нельзя определить простым присваиванием значения. Для этого существует специальная функцияdefine(). Ее синтаксис таков:
define("Имя_константы", "Значение_константы", [Нечувствительность_к_регистру])
По умолчанию именаконстантчувствительны к регистру. Для каждойконстантыэто можно изменить, указав в качестве значения аргумента Нечувствительность_к_региструзначениеTrue.
Получить значениеконстантыможно, указав ее имя. В отличие отпеременных, не нужно предварять имяконстантысимволом$. Кроме того, для получения значенияконстантыможно использовать функциюconstant()с именемконстантыв качестве параметра.
// определяем константу
// PASSWORD
define("PASSWORD","qwerty");
// определяем регистронезависимую
// константу PI со значением 3.14
define("PI","3.14", True);
// выведем значение константы PASSWORD,
// т.е. qwerty
echo (PASSWORD);
// тоже выведет qwerty
echo constant("PASSWORD");
echo (password);
/* выведет password и предупреждение,
поскольку мы ввели регистрозависимую
константу PASSWORD */
echo pi;
// выведет 3.14, поскольку константа PI
// регистронезависима по определению
?>

Кромеконстант, объявляемых пользователем, о которых мы только что рассказали, в PHP существует рядконстант, определяемых самим интерпретатором (в зависимости от версии языка). Например,константа__FILE__хранит имя файла программы (и путь к нему), которая выполняется в данный момент,__FUNCTION__содержит имя функции,__CLASS__– имя класса,PHP_VERSION– версия интерпретатора PHP.

Операторы
Операторыпозволяют выполнять различные действия спеременными,константамии выражениями.
Арифметические операторы

Обозначение
Название
Пример

+
Сложение
$a + $b

-
Вычитание
$a - $b

*
Умножение
$a * $b

/
Деление
$a / $b

%
Остаток от деления
$a % $b


Строковые операторы

Обозначение
Название
Пример

.
Конкатенация(сложение строк)
$c = $a . $b
(это строка, состоящая из$aи$b)


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

Обозначение
Название
Описание
Пример

=
Присваивание
Переменнойслева отоператорабудет присвоено значение, полученное в результате выполнения каких-либо операций илипеременной/константыс правой стороны
$a = ($b = 4) +5;
($aбудет равна9,$bбудет равна4)

+=

Сокращение. Прибавляет кпеременнойчисло и затем присваивает ей полученное значение
$a += 5;
(эквивалентно$a = $a + 5;)

.=

Сокращенно обозначает комбинацию операцийконкатенациии присваивания (сначала добавляется строка, потом полученная строка записывается впеременную)
$b = "Привет ";
$b .= "всем";
(эквивалентно$b = $b . "всем";)
В результате:$b="Привет всем"


Логические операторы

Обозначение
Название
Описание
Пример

and
И
$aи$bистинны (True)
$a and $b

&&
И

$a && $b

or
Или
Хотя бы одна изпеременных$aили$bистинна (возможно, что и обе)
$a or $b

||
Или

$a || $b

xor
Исключающее или
Одна изпеременныхистинна. Случай, когда они обе истинны, исключается
$a xor $b

!
Инверсия (NOT)
Если$a=True, то!$a=Falseи наоборот
! $a


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

Обозначение
Название
Описание
Пример

==
Равенство
Значенияпеременныхравны
$a == $b

===
Эквивалентность
Равны значения итипыпеременных
$a === $b

!=
Неравенство
Значенияпеременныхне равны
$a != $b

<>
Неравенство

$a <> $b

!==
Неэквивалентность
Переменныене эквивалентны
$a !== $b

<
Меньше

$a < $b

>
Больше

$a > $b

<=
Меньше или равно

$a <= $b

>=
Больше или равно

$a >= $b


Операторы инкремента и декремента

Обозначение
Название
Описание
Пример

++$a
Пре-инкремент
Увеличивает$aна единицу и возвращает$a
$a=4;
echo "Должно быть 4:" .$a++;
echo "Должно быть 6:" .++$a;
?>

$a++
Пост-инкремент
Возвращает$a, затем увеличивает$aна единицу


--$a
Пре-декремент
Уменьшает$aна единицу и возвращает$a


$a--
Пост-декремент
Возвращает$a, затем уменьшает$aна единицу










Типы данных
PHP поддерживает восемь простыхтипов данных.
Четыре скалярныхтипа:
boolean (логический);
integer (целый);
float (с плавающей точкой);
string (строковый).
Два смешанныхтипа:
array (массив);
object (объект).
И два специальныхтипа:
resource (ресурс);
NULL.
В PHP не принято явное объявлениетиповпеременных. Предпочтительнее, чтобы это делал сам интерпретатор во время выполнения программы в зависимости от контекста, в котором используетсяпеременная. Рассмотрим по порядку все перечисленныетипы данных.
Тип boolean (булев или логический тип)
Этот простейшийтипвыражает истинность значения, то естьпеременнаяэтоготипаможет иметь только два значения – истинаTRUEили ложьFALSE.
Чтобы определить булевтип, используют ключевое словоTRUEилиFALSE. Оба регистронезависимы.
$test = True;
?>
Тип integer (целые)
Этоттипзадает число из множества целых чиселZ = {..., -2, -1, 0, 1, 2, ...}. Целые могут быть указаны в десятичной, шестнадцатеричной или восьмеричной системе счисления, по желанию с предшествующим знаком "-" или "+".
Если вы используете восьмеричную систему счисления, вы должны предварить число0(нулем), для использования шестнадцатеричной системы нужно поставить перед числом0x.
# десятичное число
$a = 1234;
# отрицательное число
$a = -123;
# восьмеричное число (эквивалентно
# 83 в десятичной системе)
$a = 0123;
# шестнадцатеричное число (эквивалентно
# 26 в десятичной системе)
$a = 0x1A;
?>
Размерцелогозависит от платформы, хотя, как правило, максимальное значение около двух миллиардов (это 32-битное знаковое). Беззнаковыецелые PHP не поддерживает.
Если вы определите число, превышающее пределыцелого типа, оно будет интерпретировано какчисло с плавающей точкой. Также если вы используетеоператор, результатом работы которого будет число, превышающее пределыцелого, вместо него будет возвращеночисло с плавающей точкой.
В PHP не существуетоператораделенияцелых. Результатом1/2будетчисло с плавающей точкой0.5. Вы можете привести значение кцелому, что всегда округляет его в меньшую сторону, либо использовать функциюround(), округляющую значение по стандартным правилам.
Для преобразования переменнойк конкретномутипунужно передпеременнойуказать в скобках нужныйтип. Например, для преобразованияпеременной$a=0.5кцелому типунеобходимо написать(integer)(0.5)или(integer)$aили использовать сокращенную запись(int)(0.5).
Возможность явного приведения типовпо такому принципу существует для всехтипов данных(конечно, не всегда значение одноготипаможно перевести в другойтип). Мы не будем углубляться во все тонкости приведениятипов, поскольку PHP делает это автоматически в зависимости от контекста.
Тип float (числа с плавающей точкой)
Числа с плавающей точкой(они же числа двойной точности илидействительные числа) могут быть определены при помощи любого из следующих синтаксисов:
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
Размерчисла с плавающей точкойзависит от платформы, хотя максимум, как правило,~1.8e308с точностью около14десятичных цифр.
Тип string (строки)
Строка– это набор символов. В PHP символ – это то же самое, что байт, это значит, что существует ровно256 различных символов. В PHP практически не существует ограничений на размерстрок, поэтому нет абсолютно никаких причин беспокоиться об их длине.
Строкав PHP может быть определена тремя различнымиспособами:
с помощьюодинарных кавычек;
с помощьюдвойных кавычек;
heredoc-синтаксисом.
Одинарные кавычки
Простейшийспособопределитьстроку– это заключить ее водинарные кавычки"'". Чтобы использовать одинарную кавычкувнутристроки, как и во многих других языках, перед ней необходимо поставить символ обратной косой черты "\", т. е. экранировать ее. Если обратная косая черта должна идти передодинарной кавычкойлибо быть в концестроки, необходимо продублировать ее "\\'".
Если внутристроки, заключенной водинарные кавычки, обратный слэш "\" встречается перед любым другим символом (отличным от "\" и "'" ), то он рассматривается как обычный символ и выводится, как и все остальные. Поэтому обратную косую черту необходимо экранировать, только если она находится в концестроки, перед закрывающей кавычкой.
В PHP существует ряд комбинаций символов, начинающихся с символа обратной косой черты. Их называют управляющими последовательностями, и они имеют специальные значения, о которых мы расскажем немного позднее. Так вот, в отличие от двух других синтаксисов,переменныеиуправляющие последовательностидля специальных символов, встречающиеся встроках, заключенных водинарные кавычки, необрабатываются.
echo 'Также вы можете вставлять в строки
символ новой строки таким образом,
поскольку это нормально';
// Выведет: Чтобы вывести ' надо
// перед ней поставить \
echo 'Чтобы вывести \' надо перед ' .
'ней поставить \\';
// Выведет: Вы хотите удалить C:\*.*?
echo 'Вы хотите удалить C:\\*.*?';
// Выведет: Это не вставит: \n новую строку
echo 'Это не вставит: \n новую строку';
// Выведет: Переменные $expand также
// $either не подставляются
echo 'Переменные $expand также $either' .
'не подставляются';
?>
Двойные кавычки
Еслистроказаключена вдвойные кавычки""", PHP распознает большее количествоуправляющих последовательностейдля специальных символов. Некоторые из них приведены втаблице 2.7.
Таблица 2.7.Управляющие последовательности

Последовательность
Значение

\n
Новаястрока(LFили0x0A (10)в ASCII)

\r
Возврат каретки (CRили0x0D (13)в ASCII)

\t
Горизонтальная табуляция (HTили0x09 (9)в ASCII)

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

\$
Знак доллара

\"
Двойная кавычка

Heredoc
Другойспособ определения строк– это использованиеheredoc-синтаксиса. В этом случаестрокадолжна начинаться с символа<<<, после которого идет идентификатор. Заканчиваетсястрокаэтим же идентификатором. Закрывающий идентификатор должен начинаться в первом столбцестроки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания и начинаться не с цифры или знака подчеркивания.
Heredoc-текст ведет себя так же, как истрокавдвойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки вheredoc, но вы по-прежнему можете использовать перечисленные вышеуправляющие последовательности.Переменныевнутриheredocтожеобрабатываются.
$str = << Пример строки, охватывающей несколько
строчек, с использованием
heredoc-синтаксиса
EOD;
// Здесь идентификатор – EOD. Ниже
// идентификатор EOD
$name = 'Вася';
echo << Меня зовут "$name".
EOD;
// это выведет: Меня зовут "Вася".
?>
Тип array (массив)
Массивв PHP представляет собой упорядоченную карту –тип, который преобразуетзначениявключи. Этоттип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственномассив, список (вектор), хеш-таблицу (являющуюся реализацией карты), стэк, очередь и т.д.
Определитьмассивможно с помощью конструкцииarray()или непосредственно задаваязначенияего элементам.
Определение при помощи array()
array ([key] => value, [key1] => value1, ... )
Языковая конструкцияarray()принимает в качестве параметров парыключ=>значение, разделенные запятыми. Символ=>устанавливает соответствие междузначениеми егоключом.Ключможет быть какцелым числом, так истрокой, азначениеможет быть любого имеющегося в PHPтипа.
Числовойключмассивачасто называют индексом. Индексированиемассивав PHP начинается с нуля.Значениеэлементамассиваможно получить, указав после именимассивавквадратных скобкахключискомого элемента. Еслиключмассива представляет собой стандартную записьцелого числа, то он рассматривается как число, в противном случае – какстрока. Поэтому запись$a["1"]равносильна записи$a[1], так же как и$a["-1"]равносильно$a[-1].
$books = array ("php" => "PHP users guide", 12 => true);
echo $books["php"];
//выведет "PHP users guide"
echo $books[12];
//выведет 1
?>
Если для элементаключне задан, то в качествеключаберется максимальный числовойключ, увеличенный на единицу. Если указатьключ, которому уже было присвоено какое-тозначение, то оно будет перезаписано. Начиная с PHP 4.3.0, если максимальныйключ– отрицательное число, то следующимключоммассивабудет ноль (0).
// массивы $arr и $arr1 эквивалентны
$arr = array(5 => 43, 32, 56, "b" => 12);
$arr1 = array(5 => 43, 6 => 32,
7 => 56, "b" => 12);
?>

Если использовать в качествеключаTRUEилиFALSE, то егозначениепереводится соответственно в единицу и нольтипа integer. Если использовать NULL, то вместоключаполучим пустуюстроку. Можно использовать и саму пустуюстрокув качествеключа, при этом ее надо брать в кавычки. Так что это не то же самое, что использование пустыхквадратных скобок. Нельзя использовать в качествеключамассивыиобъекты.
Определение с помощью синтаксиса квадратных скобок
Создатьмассивможно, просто записывая в негозначения. Как мы уже говорили,значениеэлементамассиваможно получить с помощьюквадратных скобок, внутри которых нужно указать егоключ, например,$book["php"]. Если указать новыйключи новоезначение, например,$book["new_key"]="new_value", то вмассивдобавится новый элемент. Если мы не укажемключ, а только присвоимзначение$book[]="new_value", то новый элементмассивабудет иметь числовойключ, на единицу больший максимального существующего. Еслимассив, в который мы добавляемзначения, еще не существует, то он будетсоздан.
$books["key"]= value; // добавили в массив
// $books значение
// value с ключом key
$books[] = value1; /* добавили в массив
значение value1 с
ключом 13, поскольку
максимальный ключ у
нас был 12 */
?>
Для того чтобы изменить конкретный элементмассива, нужно просто присвоить ему с егоключомновоезначение. Изменитьключэлемента нельзя, можно толькоудалить элемент(паруключ/значение) и добавить новую.Чтобыудалить элементмассива, нужно использовать функциюunset().
$books = array ("php" =>
"PHP users guide",
12 => true);

$books[] =
"Book about Perl"; // добавили элемент
// с ключом (индексом)
// 13 это эквивалентно
// $books[13] =
// "Book about Perl";
$books["lisp"] =
123456; /* Это добавляет к массиву новый
элемент с ключом "lisp" и
значением 123456 */
unset($books[12]); // Это удаляет элемент
// c ключом 12 из массива
unset ($books); // удаляет массив полностью
?>
Заметим, что, когда используются пустыеквадратные скобки, максимальный числовойключищется средиключей, существующих вмассивес момента последнегопереиндексирования.Переиндексировать массивможно с помощью функцииarray_values().
$arr =
array ("a","b","c"); /* Создаем массив
со значениями
"a", "b" и "c".
Поскольку ключи
не указаны, они
будут 0,1,2
соответственно */
print_r($arr); // выводим массив (и ключи,
// и значения)
unset($arr[0]);
unset($arr[1]);
unset($arr[2]);
// удаляем из него все значения
print_r($arr); // выводим массив (и ключи,
// и значения)
$arr[] = "aa"; // добавляем новый элемент
// в массив.
// Его индексом (ключом)
// будет 3, а не 0
print_r($arr);

$arr =
array_values($arr); // переиндексируем
// массив
$arr[] = "bb"; // ключом этого элемента
// будет 1
print_r($arr);
?>
Тип Null
Специальное значениеNULLговорит о том, чтопеременнаяне имеет значения.
ПеременнаясчитаетсяNULL, если:
ей была присвоенаконстантаNULL($var = NULL);
ей еще не было присвоено какое-либо значение;
она была удалена с помощьюunset().
Существует только одно значениетипаNULL– регистронезависимое ключевое словоNULL.
Условные операторы
Оператор if
Это один из самых важных операторов многих языков, включая PHP. Он позволяет выполнять фрагменты кода в зависимости от условия. Структуру оператораifможно представить следующим образом:
if (выражение) блок_выполнения
Здесь выражение есть любое правильное PHP-выражение (т.е. все, что имеет значение). В процессе обработки скрипта выражение преобразуется клогическому типу. Если в результате преобразования значение выражения истинно (True), то выполняется блок_выполнения. В противном случаеблок_выполненияигнорируется. Еслиблок_выполнениясодержит несколько команд, то он должен быть заключен в фигурные скобки{ }.
Правила преобразования выражения клогическому типу:
ВFALSEпреобразуются следующие значения:
логическоеFalse
целый ноль (0)
действительный ноль (0.0)
пустая строка и строка"0"
массив без элементов
объект без переменных (подробно об объектах будет рассказано в одной из следующих лекций)
специальный типNULL
Все остальные значения преобразуются вTRUE.
$names = array("Иван","Петр","Семен");
if ($names[0]=="Иван") {
echo "Привет, Ваня!";
$num = 1;
$account = 2000;
}
if ($num) echo "Иван первый в списке!";
$bax = 30;
if ($account > 100*$bax+3)
echo "Эта строчка не появится
на экране, так как условие не выполнено";
?>

Оператор else
Мы рассмотрели только одну, основную часть оператораif. Существует несколько расширений этогооператора. Операторelseрасширяетif на случай, если проверяемое вif выражение является неверным, и позволяет выполнить какие-либо действия при таких условиях.
Структуру оператораif, расширенного с помощью оператораelse, можно представить следующим образом:
if (выражение) блок_выполнения
else блок_выполнения1
Эту конструкциюif...elseможно интерпретировать примерно так: если выполнено условие (т.е.выражение=true), то выполняем действия из блока_выполнения, иначе – действия изблока_выполнения1. Использовать операторelseне обязательно.
Посмотрим, как можно изменить предыдущий пример, учитывая необходимость совершения действий и в случае невыполнения условия.
$names = array("Иван","Петр","Семен");
if ($names[0]=="Иван") {
echo "Привет, Ваня!";
$num = 1;
$account = 2000;
} else {
echo "Привет, $names[0].
А мы ждали Ваню :(";
}
if ($num) echo "Иван первый в списке!";
else echo "Иван НЕ первый в списке?!";
$bax = 30;
if ($account > 100*$bax+3)
echo "Эта строка не появится на экране,
так как условие не выполнено";
else echo "Зато появится эта строка!";
?>

Оператор elseif
Еще один способ расширенияусловного оператораif– использование оператораelseif.elseif– это комбинацияelseиif. Как иelse, он расширяетifдля выполнения различных действий в том случае, если условие, проверяемое вif, неверно. Но в отличие отelse, альтернативные действия будут выполнены, только еслиelseif-условие является верным. Структуру оператораif, расширенного с помощью операторовelseиelseif, можно представить следующим образом:
if (выражение) блок_выполнения
elseif(выражение1) блок_выполнения1
...
else блок_выполненияN
Операторовelseifможет быть сразу несколько в одном if-блоке.Elseif-утверждение будет выполнено, только если предшествующее if-условие являетсяFalse, все предшествующиеelseif-условия являютсяFalse, а данноеelseif-условие –True.
$names = array("Иван","Петр","Семен");
if ($names[0]=="Иван") {
// если первое имя в массиве Иван
echo "Привет, Ваня!";
}elseif ($names[0] == "Петр"){
// если первое имя
// не Иван, а Петр
echo "Привет, Петя!";
}elseif ($names[0] == "Семен"){
// если первое имя не
// Иван, не Петр, а Семен
echo "Привет, Сеня!";
}else {
// если первое имя не Иван,
// не Петр и не Семен
echo "Привет, $names[0]. А ты кто такой?";
}
?>



Альтернативный синтаксис
PHP предлагаетальтернативный синтаксисдля некоторых своих управляющих структур, а именно дляif,while,for,foreachиswitch. В каждом случае открывающую скобку нужно заменить на двоеточие (:), а закрывающую – наendif;,endwhile;и т.д. соответственно.
Например, синтаксис оператораifможно записать таким образом:
if(выражение): блок_выполнения endif;
Смысл остается тем же: если условие, записанное в круглых скобках оператораif, оказалось истиной, будет выполняться весь код, от двоеточия ":" до командыendif;. Использование такого синтаксиса полезно при встраивании php в html-код.
$names = array("Иван","Петр","Семен");
if ($names[0]=="Иван"):
?>
Привет, Ваня!
endif; ?>

Если используются конструкцииelseиelseif, то также можно задействоватьальтернативный синтаксис:
$a=1;
if ($a == 5):
print "a равно 5";
print "...";
elseif ($a == 6):
print "a равно 6";
print "!!!";
else:
print "a не равно ни 5, ни 6";
endif;
?>

Оператор switch
Еще одна конструкция, позволяющая проверять условие и выполнять в зависимости от этого различные действия, – этоswitch. На русский язык название данного оператора можно перевести как "переключатель". И смысл у него именно такой. В зависимости от того, какое значение имеет переменная, он переключается между различными блоками действия.switchочень похож на операторif...elseif...elseили набор операторовif. Структуруswitchможно записать следующим образом:
switch (выражение или переменная){
case значение1:
блок_действий1
break;
case значение2:
блок_действий2
break;
...
default:
блок_действий_по_умолчанию
}
В отличие отif, здесь значение выражения не приводится к логическому типу, а просто сравнивается со значениями, перечисленными после ключевых словcase(значение1,значение2и т.д.). Если значение выражения совпало с каким-то вариантом, то выполняется соответствующий блок_действий – от двоеточия после совпавшего значения до концаswitchили до первого оператораbreak, если таковой найдется. Если значение выражения не совпало ни с одним из вариантов, то выполняются действия по умолчанию (блок_действий_по_умолчанию), находящиеся после ключевого словаdefault. Выражение вswitchвычисляется только один раз, а в оператореelseif– каждый раз, поэтому, если выражение достаточно сложное, тоswitchработает быстрее.
Для конструкцииswitch, как и дляif, возможенальтернативный синтаксис, где открывающаяswitchфигурная скобка заменяется двоеточием, а закрывающая –endswitch;соответственно.
Циклы
В PHP существует несколько конструкций, позволяющих выполнять повторяющиеся действия в зависимости от условия. Это циклыwhile,do..while,foreachиfor. Рассмотрим их более подробно.
while
Структура:
while (выражение) { блок_выполнения }
либо
while (выражение): блок_выполнения endwhile;
//эта программа напечатает все четные цифры
$i = 1;
while ($i < 10) {
if ($i % 2 == 0) print $i;
// печатаем цифру, если она четная
$i++;
// и увеличиваем $i на единицу
}
?>

do... while
Циклыdo..whileочень похожи на циклыwhile, с той лишь разницей, что истинность выражения проверяется в конце цикла, а не в начале. Благодаря этомублок_выполненияциклаdo...whileгарантированно выполняется хотя бы один раз.
Структура:
do {блок_выполнения} while (выражение);
// эта программа напечатает число 12, несмотря на то
// что условие цикла не выполнено
$i = 12;
do{
if ($i % 2 == 0) print $i;
// если число четное, то печатаем его
$i++;
// увеличиваем число на единицу
}while ($i<10)
?>

for
Это самые сложные циклы в PHP. Они напоминают соответствующие циклы C.
Структура:
for (выражение1; выражение2; выражение3) {блок_выполнения}
либо
for (выражение1; выражение2; выражение3): блок_выполнения endfor;
Здесь, как мы видим, условие состоит сразу из трех выражений. Первое выражениевыражение1вычисляется безусловно один раз в начале цикла. В начале каждой итерации вычисляетсявыражение2. Если оно являетсяTrue, то цикл продолжается и выполняются все командыблока_выполнения. Если выражение2вычисляется какFalse, то исполнение цикла останавливается. В конце каждой итерации (т.е. после выполнения всех командблока_выполнения) вычисляетсявыражение3.
Каждое из выражений 1, 2, 3 может быть пустым. Есливыражение2является пустым, то это значит, что цикл должен выполняться неопределенное время (в этом случае PHP считает это выражение всегда истинным). Это не так бесполезно, как кажется, ведь цикл можно останавливать, используя операторbreak.
Например, все четные цифры можно вывести с использованием циклаforтаким образом:
for ($i=0; $i<10; $i++){
if ($i % 2 == 0) print $i;
// печатаем четные числа
}
?>
Можно опустить все три выражения. В этом случае просто не будет задано начальное значение счетчика$iи оно не будет изменяться каждый раз в конце цикла. Все эти действия можно записать в виде отдельных команд либо вблоке_выполнения, либо перед циклом:
$i=2; // задаем начальное значение счетчика
for ( ; ; ){
if ($i>=10) break;
// если $i больше или равно 10,
// то прекращаем работу цикла
if ($i % 2 == 0) print $i;
// если число четное,
// то печатаем его
$i++; // увеличиваем счетчик на единицу
}
?>
В третье выражение конструкцииforможно записывать через запятую сразу несколько простейших команд. Например, если мы хотим просто вывести все цифры, то программу можно записать совсем просто:
for ($i=0; $i<10; print $i, $i++)
/* Если блок_выполнения не содержит команд
или содержит только одну команду,
фигурные скобки, в которые он заключен,
можно опускать*/
?>

foreach
Еще одна полезная конструкция. Она появилась только вPHP4и предназначена исключительно для работы с массивами.
Синтаксис:
foreach ($array as $value) {блок_выполнения}
либо
foreach ($array as $key => $value)
{блок_выполнения}
В первом случае формируется цикл по всем элементам массива, заданного переменной$array. На каждом шаге цикла значение текущего элемента массива записывается в переменную$value, и внутренний счетчик массива передвигается на единицу (так что на следующем шаге будет виден следующий элемент массива). Внутриблока_выполнениязначение текущего элемента массива может быть получено с помощью переменной$value. Выполнениеблока_выполненияпроисходит столько раз, сколько элементов в массиве$array.
Вторая форма записи в дополнение к перечисленному выше на каждом шаге цикла записывает ключ текущего элемента массива в переменную$key, которую тоже можно использовать вблоке_выполнения.
Когдаforeachначинает исполнение, внутренний указатель массива автоматически устанавливается на первый элемент.
$names = array("Иван","Петр","Семен");
foreach ($names as $val) {
echo "Привет, $val
";
// выведет всем приветствие
}
foreach ($names as $k => $val) {
// кроме приветствия,
// выведем номера в списке, т.е. ключи
echo "Привет, $val !
Ты в списке под номером $k
";
}
?>

Операторы передачи управления
Иногда требуется немедленно завершить работу цикла либо отдельной его итерации. Для этого используют операторыbreakиcontinue.

Break
Операторbreakзаканчивает выполнение текущего цикла, будь тоfor,foreach,while,do..whileилиswitch.breakможет использоваться с числовым аргументом, который говорит, работу скольких управляющих структур, содержащих его, нужно завершить.
$i=1;
while ($i) {
$n = rand(1,10);
// генерируем произвольное число
// от 1 до 10
echo "$i:$n ";
// выводим номер итерации и
// сгенерированное число
if ($n==5) break;
/* Если было сгенерировано число 5,
то прекращаем работу цикла. В этом случае
все, что находится после этой строчки
внутри цикла, не будет выполнено */
echo "Цикл работает
";
$i++;
}
echo "
Число итераций цикла $i ";
?>
Если после оператораbreakуказать число, то прервется именно такое количество содержащих этотоператор циклов. В приведенном выше примере это неактуально, посколькувложенных цикловнет. Немного изменим наш скрипт:
$i=1;
while ($i) {
$n = rand(1,10);
// генерируем произвольное число
// от 1 до 10
switch ($n){
case 5:
echo "
Выход из switch (n=$n)
";
break 1;
// прекращаем работу switch
// (первого содержащего break цикла)
case 10:
echo "
Выход из switch и
while (n=$n)
";
break 2;
// прекращаем работу switch и while
// (двух содержащих break циклов)
default:
echo "switch работает (n=$n), ";
}
echo " while работает – шаг $i
";
$i++;
}
echo "
Число итераций цикла $i ";
?>

continue
Иногда нужно не полностью прекратить работу цикла, а только начать его новую итерацию. Операторcontinueпозволяет пропустить дальнейшие инструкции изблока_выполнениялюбого цикла и продолжить выполнение с нового круга.continueможно использовать с числовым аргументом, который указывает, сколько содержащих егоуправляющих конструкцийдолжны завершить работу.
Заменим в примере предыдущего параграфа операторbreakнаcontinue. Кроме того, ограничим число шагов цикла тремя.
$i=1;
while ($i<=4) {
$n = rand(1,10);
// генерируем произвольное число
// от 1 до 10
echo "$i:$n ";
// выводим номер итерации и
// сгенерированное число
if ($n==5) {
echo "Новая итерация
";
continue;
/* Если было сгенерировано число 5, то начинаем новую итерацию цикла, $i не увеличивается*/
}
echo "Цикл работает
";
$i++;
}
--$i;
echo "
Число итераций цикла $i ";
?>
Заметим, что после выполнения оператораcontinueработа цикла не заканчивается. В примере счетчик цикла не меняется в случае получения числа 5, поскольку он находится после оператораcontinue. Фактически с помощьюcontinueмы пытаемся избежать ситуации, когда будет сгенерировано число5.
В PHP существует одна особенность использования оператораcontinue– в конструкцияхswitchон работает так же, как иbreak. Еслиswitch находится внутри цикла и нужно начать новую итерацию цикла, следует использоватьcontinue 2.

Операторы включения
include
Операторincludeпозволяет включать код, содержащийся в указанном файле, и выполнять его столько раз, сколько программа встречает этотоператор. Включение может производиться любым из перечисленных способов:
include 'имя_файла';
include $file_name;
include ("имя_файла");
Пример. Пусть в файлеparams.incу нас хранится набор каких-то параметров и функций. Каждый раз, когда нам нужно будет использовать эти параметры (функции), мы будем вставлять в текст нашей основной программы командуinclude 'params.inc'.
params.inc
$user = "Вася";
$today = date("d.m.y");
/* функция date() возвращает дату и время (здесь – дату в формате день.месяц.год) */
?>

include.php
include ("params.inc");
/* переменные $user и $today заданы в файле params.inc. Здесь мы тоже можем ими пользоваться благодаря команде include("params.inc") */
echo "Привет, $user!
";
// выведет "Привет, Вася!"
echo "Сегодня $today";
// выведет, например, "Сегодня 7.07.05"
?>

Заметим, что использование оператораincludeэквивалентно простой вставке содержательной части файлаparams.incв код программы include.php. Может быть, тогда можно было вparams.incзаписать простой текст без всяких тегов, указывающих на то, что это php-код? Нельзя! Дело в том, что в момент вставки файла происходит переключение из режима обработки PHP в режим HTML. Поэтому код внутри включаемого файла, который нужно обработать какPHP-скрипт, должен быть заключен в соответствующие теги.
Кроме локальных файлов, с помощьюincludeможно включать и внешние файлы, указывая их url-адреса.
include()– это специальная языковая конструкция, поэтому при использовании внутри условных блоков ее нужно заключать в фигурные скобки.
/* Это неверная запись. Получим ошибку. Мы же вставляем не одну команду, а несколько, они только записаны в другом файле */
if ($condition) include("first.php");
else include("second.php");
// А вот так правильно.
if ($condition){ include("first.php"); }
else { include("second.php"); }
?>
При использованииincludeвозможны два вида ошибок – ошибка вставки (например, нельзя найти указанный файл, неверно написана сама команда вставки и т.п.) или ошибка исполнения (если ошибка содержится во вставляемом файле). В любом случае при ошибке в командеincludeисполнение скрипта не завершается.

Оператор require
Этот оператор действует примерно так же, как и#includeв C++. Все, что мы говорили оinclude, лишь за некоторыми исключениями, справедливо и дляrequire.requireтакже позволяет включать в программу и исполнять какой-либо файл. Основное отличиеrequireиincludeзаключается в том, как они реагируют на возникновение ошибки. Как уже говорилось,includeвыдает предупреждение, и работа скрипта продолжается. Ошибка в requireвызывает фатальную ошибку работы скрипта и прекращает его выполнение.
Условные операторынаrequire()не влияют. Хотя, если строка, в которой появляется этот оператор, не исполняется, то ни одна строка кода из вставляемого файла тоже не исполняется. Циклы также не влияют наrequire(). Хотя код, содержащийся во вставляемом файле, является объектом цикла, но вставка сама по себе происходит только однажды. require, как иinclude, при использовании внутри условных блоков нужно заключать в фигурные скобки.

Обработка данных HTML-форм средствами PHP
Обмен информацией между Web-сервером и клиентом























Задания

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

Задание 1. Cоздание сайта на PHP
Работать будем с локальным сервером Apache.
Зайдем на виртуальный диск, который был создан при установке сервера.
Заходим в папку home/localhost/www и создаем здесь новую папку для сайта с именем php.
Теперь нужно запустить сервер (ярлык Apache).
Теперь нужно создать файл php (создать текстовый файл и сохранить его с расширением php).
В текстовый файл вставить конструкцию:


В адресной строке браузера прописать адрес: http://localhost/php/
Задание 2. Реализовать приведенные ниже коды:


Задание 3. Дана вещественная матрица А(N,M). Составить программу подсчета количества элементов матрицы, удовлетворяющих условию р1<=a(i,j)<=p2. Значения р1 и р2 задаются самостоятельно.
M=$M
p1=$p1
p2=$p2";?>
$i$j=", $a[$i][$j]=rand(0,20); ?>
=$p1 && $a[$i][$j]<=$p2) $n++;echo "Количество элементов, для которых верно условие "."$p1<=aij<=$p2, равно: $n";?>

Задание 4. Во всех последующих заданиях известно следующие: задано значения действительных х, у, z. Вычислить значения следующих выражений:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Задание 5. Модифицировать с помощью языка PHP форму из лабораторной работы №1 следующим образом:






22