- •Государственное образовательное учреждение высшего профессионального образования Волго-Вятская академия государственной службы
- •Разработка Web-приложений
- •Часть 2. Основы php – основного языка создания Web - приложений
- •Оглавление
- •Глава 1. Основы языка php 7
- •Глава 2. Синтаксис и семантика операторов php 58
- •Глава 3. Массивы 103
- •Глава 4. Функции 141
- •Глава 5. Работа с файлами 198
- •Глава 6. Вопросы и задания 271
- •Глава 1.Основы языка php
- •1.1.Замечания о некоторых особенностях языка и среды его выполнения
- •1.2. Как работает обработчик кода php
- •1.3. Синтаксис php – начальные сведения
- •1.3.1. Как интерпретатор распознаёт (различает) код php
- •1.3.2. Синтаксис php разрешает совместное и раздельное использование кода php и html
- •Пример 1‑1
- •1.3.3. Другие особенности синтаксиса php начального уровня
- •Пример 1‑2
- •Наиболее часто применяемые символы управляющих последовательностей
- •1.4. Синтаксис php –типы данных, строки, переменные, константы, функции и выражения
- •1.4.1. Основы понятия «типы данных». Классификация данных в php
- •Скалярных типов (всего четыре):
- •Смешанных типов (всего 2):
- •Специальных типов (всего 2):
- •1.4.2. Интервалы значений числовых данных в php
- •1.4.2.1. Целые числа
- •1.4.2.2.Вещественные (с плавающей точкой) числа
- •1.4.3. Элементы языка, которые «держат» данные. Их синтаксис
- •1.4.3.1. Постановка задачи
- •1.4.3.2. Строки
- •Пример 1‑3
- •Пример 1‑4
- •1.4.3.3. Переменные
- •Пример 1‑5
- •Пример 1‑6
- •Пример 1‑7
- •1.4.3.4. Константы
- •Пример 1‑8
- •1.4.3.5. Функции в php – введение в тему
- •Пример 1‑9 – обобщённая схема определения функции
- •Пример 1‑10
- •1.4.3.6. Функции php по работе с данными
- •Пример 1‑11
- •Пример 1‑12
- •Пример 1‑13
- •Пример 1‑14
- •Пример 1‑15
- •1.4.3.7. Функции php по работе со строками
- •Пример 1‑16
- •Пример 1‑17
- •Пример 1‑18
- •Пример 1‑19
- •1.4.3.8. Понятие «выражение» в php
- •1.4.3.9. Манипуляции с типами
- •Глава 2. Синтаксис и семантика операторов php
- •2.1. Классификация операторов php и порядок их выполнения
- •О ператоры php в порядке убывания приоритета
- •2.2. Математические операторы
- •2.2.1. Арифметические операции
- •Арифметические операторы php
- •Пример 2‑20
- •2.2.2. Математические функции
- •2.2.3. Операторы присваивания
- •Пример 2‑21
- •2.2.4. Операторы инкремента (увеличения) и декремента (уменьшения)
- •Пример 2‑22
- •2.2.5. Строковые операторы
- •Пример 2‑23
- •2.2.6. Побитовые операторы
- •Пример 2‑24
- •Побитовые операторы php
- •2.2.7. Класс логических операторов
- •2.2.8. Операторы (конструкции) управления выполнением скрипта
- •2.2.8.1. Операторы условного перехода
- •If ( условие )
- •Пример 2‑25
- •2.2.8.2. Расширение оператора if - оператор elseif
- •If (выражение) блок_выполнения
- •Пример 2‑26
- •Пример 2‑27
- •Оператор переключения "switch" ("выбор")
- •Пример 2‑28
- •2.2.9. Операторы цикла
- •2.2.9.1. Простейший оператор цикла – цикл с предусловием - оператор while
- •While (выражение) {блок_выполнения}20
- •While (выражение): блок_выполнения endwhile;
- •Пример 2‑29
- •2.2.9.2. Цикл с постусловием - оператор do while
- •2.2.9.3. Циклы for
- •Пример 2‑30
- •Пример 2‑31
- •Пример 2‑32
- •2.2.9.4. Частные случаи использования цикла for в php
- •Пример 2‑33
- •Пример 2‑34
- •Пример 2‑35
- •Пример 2‑36
- •2.2.9.5. Об альтернативном синтаксисе операторов цикла
- •Глава 3. Массивы
- •3.1. Общие вопросы использования массивов в php: определение, типы, использование в выражениях и размерность
- •3.2. Создание массивов и особенности их использования в php
- •Пример 3‑37
- •Пример 3‑38
- •3.3. Операции с массивами
- •3.3.1. Вывод элементов массива на экран
- •Пример 3‑39
- •3.3.2. Изменение, перебор элементов и удаление элементов массива
- •Пример 3‑40
- •Пример 3‑41
- •3.3.3. Сортировка массива
- •Пример 3‑42 - сортировка массивов
- •Array(день1,день3, день11, день111);
- •Array(5,1,3,день1,день5,день3,day1,"яблоко","груша","apple")
- •3.3.4. Преобразование строк в массивы и наоборот
- •Пример 3‑43
- •3.3.5. Примеры специальных функций обработки массивов
- •Extract (имя_массива)
- •Пример 3‑44 - использование array_merge() с параметрами разных типов в php 5
- •Пример 3‑45 – обработка массивов
- •3.3.6. Функции по работе с массивами для самостоятельного изучения
- •3.4. Многомерные массивы
- •3.4.1. Введение
- •Пример 3‑46
- •3.4.2. Создание многомерных массивов
- •Пример 3‑47
- •Пример 3‑48
- •3.4.3. Ссылки на элементы многомерных массивов
- •3.4.4. Перебор элементов многомерных массивов
- •Пример 3‑49
- •3.4.5. Операторы над массивами
- •Операторы над массивами
- •Пример 3‑50
- •Глава 4.Функции
- •4.1. Введение
- •4.2.Создание, подключение и использование собственных функций в php
- •4.2.1. Синтаксис описания функции
- •4.2.2. Описание работы функции навигации по страницам сайта
- •4.2.3. Архитектура проекта, иллюстрирующего работу функции
- •Пример 4-1 - код «простого» решения
- •Пример 4‑2 - текст файла index.Php
- •4.3. Передача данных в функцию
- •4.3.1. Передача в функцию списка простых данных
- •Пример 4‑6
- •Пример 4‑7
- •4.3.2. Передача массивов в функцию
- •Пример 4‑8
- •Пример 4‑9
- •4.3.3. Функции с переменным числом аргументов
- •Пример 4‑10
- •4.3.4. Два способа передачи аргументов в функцию
- •4.3.5. Ссылка в php
- •4.3.6. Передача аргументов в функцию по ссылке
- •Пример 4‑11
- •4.4. Организация возврата значений из функции в вызывающий её скрипт
- •4.4.1. Функции, возвращающие единичные (скалярные) значения
- •Пример 4‑12
- •Пример 4‑13
- •4.4.2. Функция, возвращающая массив. Использование списков
- •Пример 4‑14
- •4.4.3. Функция, возвращающая ссылки
- •Пример 4‑15
- •4.5. Типизация переменных в php по их «области действия», «видимости» и «времени жизни». Глобальные, суперглобальные и статические переменные
- •4.5.1. Общие положения
- •Пример 4‑16
- •4.5.2. Предопределённые переменные и суперглобальные массивы
- •Пример 4‑17
- •4.5.3. Статические переменные
- •Пример 4‑18
- •4.6. Дополнительные возможности работы с функциями в php
- •4.6.1 Переменные, ссылающиеся на функции
- •Пример 4‑19
- •4.6.2. Условное (динамическое) описание функций
- •Пример 4‑20
- •4.6.3. Вложенные функции и вложенные файлы
- •Где хранить эти файлы?
- •Какую команду надо использовать, чтобы вставлять файл в нужное место?
- •Какими должны быть синтаксис и расширение таких файлов?
- •Пример 4‑511
- •4.6.4. Обработка ошибок в функциях пользователя
- •Пример 4‑22
- •4.7. Рекурсивное использование функций
- •4.7.1. Рекурсивные и итеративные функции – в чём разница, недостатки и преимущества
- •Пример 4‑23
- •4.8. Основные итоги по теме «Функции»
- •Глава 5.Работа с файлами
- •5.1. Возможности работы с файлами в php
- •5.1.1. Введение
- •5.1.2. Понятия и термины, связанные с понятием «файл»
- •5.1.2.1. Понятие файла и файловой системы
- •Свойства файла
- •Операции и сущности, связанные с файлами
- •Бинарные (двоичные) и текстовые файлы
- •5.2. Функция открытия файла - базовая функция при работе с файлам. Особенности обращения к файлам
- •5.2.1. Синтаксис функции открытия файла
- •Пример 5‑52
- •5.2.2. Абсолютные и относительные пути (дорожки) до файла
- •5.2.3. Понятие унифицированного (единообразного) идентификатора ресурса - uri
- •5.2.4. Уточнение возможных ссылок на файлы и особенности работы с ними
- •Пример 5‑53
- •Пример 5‑54
- •Перечень некоторых предопределённых констант php
- •5.3. Примеры использования других функций для работы с файлами
- •5.3.1. Проверка существования файла
- •5.3.2. Проверка существования и размера файла
- •Int filesize(string имя_файла)
- •5.3.3. Закрытие файла после завершения работы с ним
- •Int fclose(int дескриптор файла)
- •5.3.4. Основные операции с открытыми файлами
- •5.3.4.1. Запись в файл
- •Int fwrite(int дескриптор, string stroka[, int длина])
- •5.3.4.2. Запись файла целиком
- •Пример 5‑55
- •5.3.4.3. Чтение из файла
- •Пример 5‑56
- •5.3.5. Специальные случаи чтения файлов
- •5.3.5.1. Чтение строк текста: функция fgets( )
- •5.3.5.2. Чтение строк текста c отбрасыванием html тегов: функция fgetss( )
- •5.3.5.3. Посимвольное чтение файла: функция fgetс( )
- •Пример 5‑57
- •5.3.5.4. Чтение файла в индексированный массив: функция file()
- •5.3.5.5. Чтение файла целиком в строку: функция file_get_contents()
- •5.3.5.6. Чтение файла с его синтаксическим разбором: функция fscanf()
- •Пример 5‑58
- •5.4. Функции для операций над каталогами
- •Перечень функций по работе с каталогами
- •5.4.1. Получение дорожки до текущего скрипта и его имени
- •5.4.2. Чтение всего содержимого каталога
- •Пример 5‑8
- •5.4.3. Печать дерева каталогов
- •Визуальное отображение дерева каталогов для текущего каталога ТекКат
- •Пример 5‑9
- •5.5. Общая классификация функций php по работе с файловой системой
- •Категории функций php по работе с файловой системой
- •5.6. Права пользователей по доступу к файлам
- •5.6.1. Определение прав доступа
- •5.6.2. Описание прав доступа в системе unix и их реализация
- •Пример записи прав доступа к файлу для разных групп пользователей
- •B. Матричный вид
- •5.6.3. Особенности управления доступом к файлу в php
- •Глава 6.Вопросы и задания
- •6.1. Вопросы и задания к главе 1(Основы языка php)
- •6.1.1.Контрольные вопросы к главе 1
- •6.1.2. Задания к главе 1
- •6.2. Вопросы и задания к главе 2 (Синтаксис и семантика операторов php)
- •6.2.1.Контрольные вопросы к главе 2
- •6.2.2. Задания к главе 2
- •6.3. Вопросы и задания к главе 3 (Массивы)
- •6.3.1.Контрольные вопросы к главе 3
- •6.3.2. Задания к главе 3
- •6.4. Вопросы и задания к главе 4(Функции)
- •6.4.1.Контрольные вопросы к главе 4
- •6.4.2. Задания к главе 4
- •6.5. Вопросы и задания к главе 5(Работа с файлами)
- •6.5.1.Контрольные вопросы к главе 5
- •6.5.2. Задания к главе 5
- •Рекомендованные для работы с пособием источники
- •32 Монтирование файловой системы — процесс, подготавливающий раздел диска к использованию операционной системой.
Пример 2‑30
<?php
for ($i = 0; $i < 3; $i++)
{
echo "$i, Привет ";
}
echo "<br>";
for ($i = 1; $i < 1+2; $i++)
{
echo "$i, Привет ";
}
echo "<br>";
$j = 1; $k = 2; $l = 2;
for ($i = $l; $i < $j + $k; $i++)
{
echo "$i, Привет ";
}
echo "<br>";
for ($i = 3; $i > 0; $i--)
{
echo "$i, Привет ";
}
?>
Вложенные циклы for
Один цикл for можно использовать внутри другого. Как это сделать, показано на примере Пример 2 -31, выводящем таблицу умножения чисел от 1 до 9.
Пример 2‑31
<?php
for ($i=1; $i<=9; $i++)
{
echo ("<br> Умножение на $i <br>");
for ($j=1; $j<=9; $j++)
{
$result = $i*$j;
echo "$i X $j= $result <br>";
}
}
?>
Универсальный цикл FOR
В PHP применяется более сложная форма оператора for. С его помощью можно совершать разнообразные циклы, основанные на действиях более сложных, чем простая переборка значения счётчика.
Для отображения структуры (синтаксиса) этого оператора в литературе встречаются четыре формы:
1. for (выражение1; выражение2; выражение3) {блок_выполнения}
2. for (начальное_выражение; условное_выражение; заключительное _выражение) {блок_выполнения}
for (инициализация; условие; приращение) { блок_выполнения}
for (инициализирующие_команды; условие_цикла; команды_после _прохода) {тело_цикла}
В дополнение отметим, что в PHP возможна альтернативная форма оператора, в которой тело цикла (блок выполнения) обрамляется не фигурными скобками, а двоеточием и служебным словом endfor:
for (выражение1; выражение2; выражение3): блок_выполнения endfor;
При сравнении приведённых форм с синтаксисом традиционного оператора for видно, что он является частным случаем универсального.
Анализ четырёх форм позволяет в целом понять логику работы оператора. Очевидно, что перед началом итераций блока тела цикла происходит выполнение каких-то действий. Наиболее общей из них выглядит форма 1.
С расшифровкой выражений 2-4 все понятно. Сравнивая формы 3 и 1 догадываемся, что эти действия должны отображаться в выражении1 (или в начальном выражении).
Так же, как и в традиционном цикле, общие правила выполнения (алгоритм) универсального for следующие:
Начальное значение (выражение1) выполняется безусловно (то есть всегда), один раз, до начала цикла.
Условное выражение (выражение2) проверяется на истинность перед началом каждой итерации тела цикла.
После очередного выполнения тела цикла выполняется заключительное выражение (выражение3).
Рассмотренные выражения разделяются точкой с запятой (;).
Существуют определённые правила построения выражений, которые легче всего изучать, рассматривая соответствующие примеры.
Начнём с классического примера (Пример 2 -32):
Пример 2‑32
<?php
//Пример №1
echo "Начинает работать пример №1 <br>";
$t = 0;
for($i = 0,$j = 1; $t <= 4; $i++, $j++)
{
$t = $i + $j;
echo "\$t= $t, <br>";
}
echo "\$i = $i, \$j = $j, \$t = $t, <br>";
//Пример №2
echo "Начинает работать пример №2 <br>";
for($i = 0, $j= 0, $k = "Test" . ": = "; $i < 10;$i++)$k = $k . ".";
echo $k;
echo "<br>";
//Один оператор в теле цикла можно написать без фигурных скобок
echo 'Далее - результаты работы программы с телом кода в { } <br>';
for($i = 0, $j= 0, $k = "Test" . ": = "; $i < 10;$i++)
{$k = $k . ".";
echo "\$k равно $k <br>";
}
echo $k;
?>
Обратите внимание на то, что для увеличения $i на 1 используется оператор сложения с присваиванием. Для этого есть веские причины: циклы for в PHP не поддерживают более традиционной записи $i = $i + 1.
На основании рассмотренных примеров можно дополнить сформулированный выше список правил:
Выражения в первой строке цикла могут состоять, в свою очередь, из набора других выражений, отделяемых запятыми.
Выражение1 и выражение3 могут включать в себя любые действия.
Циклы for в PHP не поддерживают традиционной записи увеличения переменных цикла.
Рассмотрим процесс выполнения цикла в примере №1 (Пример 2 -32):
Выполняется начальное выражение: переменной $i присваивается значение 0, а переменной $j – значение 1.
Проверяется условное выражение – не превышает ли значение $t числа 4? Поскольку это так, выражение условия - ИСТИНА и тело цикла будет выполняться.
Выполняются действия внутри тела цикла. Вычисленное значение $t выводится на экран.
После выполнения тела цикла, итерация заканчивается выполнением заключительного выражения (выражение 3: $i++, $j++), в результате чего значения $i и $j увеличиваются на 1 и становятся равными 1 и 2 соответственно.
В начале следующей итерации проверяется условное выражение. Текущее значение $t равно 1, и поэтому тело цикла будет в очередной раз выполняться.
В конце данной итерации значения $i и $j становятся равными 2 и 3.
Поскольку текущее значение $t = 3, снова пройдёт очередная итерация и значение $t станет равным 5.
Очередное вычисление условного выражения даст значение ЛОЖЬ. Поэтому произойдёт выход из цикла с печатью рассмотренных переменных цикла $i, $y, $t.
Семантика цикла for в обобщенном графическом отображении представлен на рисунке Рис. 2-6.
Проведённый выше анализ и рассмотренные примеры позволяют легко расшифровать эту конструкцию.
Рис. 2‑8. Обобщённое графическое отображение семантики цикла for
Многие новички не понимают, зачем создавать несколько разновидностей циклов в языке программирования (будь то PHP или какой-либо другой язык). Почему нельзя обойтись одной циклической конструкцией? Дело в том, что у цикла for существует несколько специфических особенностей. Как следует из рассмотренных выше примеров, можно инициализировать несколько переменных одновременно, разделяя команды инициализации запятыми.
Другие модификации оператора цикла возможные в PHP рассмотрены в разделе 2.2.9.5.
Сравнение конструкций for и while
Хотя циклические конструкции for и while выполняют практически одинаковые функции, считается, что цикл for делает программу более наглядной. Это объясняется тем, что программист при виде команды for немедленно получает всю необходимую информацию о механике и продолжительности цикла, так как условие изменяется в самой управляющей конструкции, а не где-то внутри блока.
С другой стороны, в командах while приходится тратить лишнее время на поиск обновлений управляющих переменных — в больших программах это может занимать немало времени.