- •Государственное образовательное учреждение высшего профессионального образования Волго-Вятская академия государственной службы
- •Разработка 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‑24
<?php
$c =1 & 5;
echo $c, "<br>";
$a= 1;
$b=5;
$c =$a & $b;
echo $c, "<br>";
$c =$a | $b;
echo $c, "<br>";
$c =$a ^ $b;
echo $c, "<br>";
$c =~ $a;
echo $c, "<br>";
$c =$a << $b;
echo $c, "<br>";
$c =$a>> $b;
echo $c, "<br>";
echo "12" ^ "9"; // Отобразит символ возврата каретки (ascii 8)
// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8
echo "hallo" ^ "hello"; /* Выведет следующие ASCII-значения: #0 #4 #0 #0 #0*/
?>
Установленными являются биты (разряды), значения которых изменились в результате присвоения ячейке конкретного значения или при использовании конкретного числа или строки.
Побитовые операторы похожи на логические операторы, работающие с логическими выражениями. По существу они и являются такими, но операндами для них являются биты целых или строковых данных.
Таблица 2‑7
Побитовые операторы php
Название |
Пример |
Описание и результат |
Побитовое 'и' |
$c=$a & $b |
В результате ($c) устанавливаются только те биты, которые установлены и в $a, и в $b. |
Побитовое 'или' |
$c=$a | $b |
Устанавливаются те биты, которые установлены либо в $a, либо в $b. |
Исключающее ′или′ |
$c=$a ^ $b |
Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b |
Отрицание ′не′ |
$c=~ $a |
Устанавливаются те биты, которые в $a не установлены, и наоборот. |
Сдвиг влево |
$c=$a << $b |
Все биты переменной $a сдвигаются на $b позиций влево (каждая позиция подразумевает 'умножение на 2') |
Сдвиг вправо |
$c=$a >> $b |
Все биты переменной $a сдвигаются на $b позиций вправо (каждый сдвиг подразумевает 'деление на 2') |
Таблица 2‑8
Результаты работы побитовых операторов (поп) для значений $a =1 и $b=5 (в десятичной системе) $c=$a (поп) $b
Операция |
Значение $c |
& |
1 |
| |
5 |
^ |
4 |
~ |
-2 |
<< |
32 |
>> |
0 |
Полезные правила по работе с побитовыми операторами:
Нельзя использовать сдвиг вправо более чем на 32 бита на тридцатидвухразрядных системах.
Не используйте сдвиг вправо для получения чисел, требующих для записи более тридцати двух двоичных разрядов (бит).
2.2.7. Класс логических операторов
Мы постепенно продвигаемся к теме управления ходом выполнения инструкций (строк) программы PHP с помощью операторов управления. По умолчанию инструкции программы интерпретируются и выполняются в линейном порядке. Однако, как и обычной жизни, решение хоть сколько-нибудь сложных задач невозможно без отклонений от такого порядка. Эти отклонения происходят при выполнении или невыполнении некоего условия.
Изучение закономерностей выбора направления решения задачи (принятие решений), в практике человеческого бытия привело к созданию науки, моделирующей эти закономерности – алгебры логики18.
Очень коротко говоря, основой алгебры логики являются:
Высказывание, которое может быть верным или неверным.
Логическая величина, которая может иметь всего два значения: ложь или истина.
Логические операции над логическими величинами.
Логическое выражение, состоящее из высказываний, логических величин и логических операций.
Правила исчисления логического выражения.
В информатике основным высказыванием является сравнение двух величин. Если высказывание справедливо, то его значение должно принимать значение, равное ИСТИНЕ, в противном случае – является ЛОЖЬЮ.
Реализация исчисления истинности сравнения в PHP (да и в других языках) осуществляется с помощью операторов сравнения. По назначению их можно отнести к классу логических операторов.
Операторы сравнения PHP
Итак, операторы сравнения, позволяют сравнивать между собой два значения.
Это в своем роде уникальные операции, потому что независимо от типов своих аргументов они всегда возвращают одно из двух: false или true. Операции сравнения (Таблица 2 -9) позволяют сравнивать два значения между собой и, если условие выполнено, возвращают true, а если нет — false.
В PHP разрешается сравнивать только скалярные переменные. Массивы и объекты в PHP до пятой версии нельзя было сравнивать. Однако при сравнении на равенство при помощи оператора ==, PHP не выдавал предупреждения об ошибке. При таком сравнении оба операнда преобразуются в слово array, которое потом и сравнивается. Поэтому результатом сравнения будет ИСТИНА (TRUE).
Начиная с версии PHP 5, стало возможным применение операций сравнения не только массивов, но и объектов. Однако эти операции достаточно специфичны, и не рассматриваются в этом пособии.
В случае если вы сравниваете целое со строкой, строка будет преобразована к числу. В случае если вы сравниваете две числовые строки, они сравниваются как целые числа.
Подведём итог: операции сравнения образуют элементарные логические выражения. Как к таковым к ним могут применяться логические операции, и они могут использоваться в операторах управления ходом выполнения программы в качестве условий перехода.
Таблица 2‑9
Операторы сравнения
Пример |
Название |
Результат |
$a = = $b |
Равно |
Равно TRUE если $a равно $b |
$a = = = $b |
Тождественно равно |
TRUE если $a равно $b и имеет тот же тип. (Добавлено в PHP 4) |
$a != $b |
Не равно |
TRUE если $a не равно $b |
$a <> $b |
Не равно |
TRUE если $a не равно $b |
$a != = $b |
Тождественно не равно |
TRUE если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4) |
$a < $b |
Меньше |
TRUE если $a строго меньше $b |
$a > $b |
Больше |
TRUE если $a строго больше $b |
$a <= $b |
Меньше или равно |
TRUE если $a is меньше или равно $b |
$a >= $b |
Больше или равно |
TRUE если $a больше или равно $b |
Логические выражения и «классические» логические операторы
Классические определения логического выражения таковы:
логическим является выражение, у которого может быть только два значения – истина или ложь;
логическое выражение состоит из логических операндов, соединённых знаками логических операций.
Однако в PHP в качестве истины может выступать любое ненулевое число или непустая строка, а под ложью – всё остальное. Поэтому классическое определение в PHP должно быть расширено. Хотя лучше этого расширения не использовать на практике.
Логические операторы (Таблица 2 -10) предназначены исключительно для работы с логическими выражениями и возвращают false или true.
Таблица 2‑10
Логические операторы PHP
Пример |
Название |
Результат |
$a and $b |
Логическое 'и' |
TRUE если и $a, и $b TRUE |
$a or $b |
Логическое 'или' |
TRUE если или $a, или $b TRUE |
$a xor $b |
Исключающее 'или' |
TRUE если $a, или $b TRUE, но не оба |
! $a |
Отрицание |
TRUE если $a не TRUE |
$a && $b |
Логическое 'и' |
TRUE если и $a, и $b TRUE. |
$a || $b |
Логическое 'или |
TRUE если или $a, или $b TRUE. |
К особенностям логических операций можно отнести следующее:
Смысл двух разных вариантов для операторов "and" и "or" в том, что они работают с различными приоритетами19.
Следует заметить, что вычисление логических выражений, содержащих такие операторы логических операций, идет всегда слева направо.
Если результат вычисления логического выражения с использованием логической операции очевиден с самого начала вычисления (например, false && что-то всегда дает false), то вычисления обрываются, даже если в выражении присутствуют вызовы функций. Например, в операторе $logic = 0&&(time()>100); стандартная функция time() никогда не будет вызвана.
Необходимо проявлять осторожность с использованием логических операций - не забывать про удваивание символа, так как при этом их можно спутать с побитовыми операциями. Например, | и || — это два совершенно разных оператора, один из них может потенциально возвращать любое число, а второй — только false и true.
Операторы инкремента (++) и декремента (--) не работают с логическими переменными.