
В обновленной серии “В подлиннике” вышла новая книга Дмитрия Котерова и Игоря Симдянова “PHP 8”.
Книга предоставляет детальное и полное изложение языка PHP 8 от простого к сложному. Ее можно использовать как для изучения языка с нуля, так и для структурирования знаний, изучения тонких моментов синтаксиса и новых возможностей последней версии. Описываются все значимые новвоведения. Рассматриваются новые типы, атрибуты, перечисления, именованные аргументы, сопоставления, объединенные типы, новые операторы ??= и ?-> и много другое. Основной упор в книге делается на объектно-ориентированные возможности языка, поэтому классы и объекты рассматриваются практически с первых глав. Приведено описание синтаксиса PHP, а тажке инструментов для работы с массивами, файлами, СУБД PostgreSQL, Redis, регулярными выражениями, графическими примитивами, сессиями и т. д.
По сравнению с предыдущей книгой авторов “PHP 7 ” добавлены 23 новые главы, а остальные обновлены или переработаны.
На сайте издательства находятся исходные коды всех листингов. В книге описаны:
- Нововведения с PHP 7.1 по PHP 8.1
- Объектно-ориентированное программирование
- Шаблоны проектирования
- Генераторы, итераторы, перечисления и атрибуты
- Приемы работы с PostgreSQL и Redis
- Стандарты PSR

Котеров Дмитрий Владимирович, системный программист, веб-разработчик с двадцатилетним стажем работы в области веб-программирования, администрирования Linux и Windows, ведущий разработчик хорошо известных в русскоязычном Интернете проектов Денвер (denwer.ru) и Orphus (orphus.ru). В повседневной практике использует языки PHP, JavaScript, Perl, C++, Java. Автор бестселлеров «Самоучитель PHP 4», «PHP 7» и более 50 статей, касающихся веб-программирования.

Симдянов Игорь Вячеславович, разработчик с двадцатилетним стажем в веб-программировании, ведущий разработчик российской финансово-технологической компании «Баланс-Платформа». Специалист по веб-разработке на PHP, Ruby, JavaScript, SQL. Автор двух десятков книг издательства БХВ по веб-программированию и базам данных, в том числе «PHP 7», «Самоучитель PHP 7», «Самоучитель Ruby».
Предисловие…………………………………………………………………………………………… 23
Для кого написана эта книга?…………………………………………………………………………………………………… 23
Исходные коды…………………………………………………………………………………………………………………………… 24
Четвертое издание……………………………………………………………………………………………………………………… 24
Общая структура книги…………………………………………………………………………………………………………….. 26
Часть I…………………………………………………………………………………………………………………………………. 26
Часть II………………………………………………………………………………………………………………………………… 26
Часть III………………………………………………………………………………………………………………………………. 26
Часть IV………………………………………………………………………………………………………………………………. 27
Часть V………………………………………………………………………………………………………………………………… 27
Часть VI………………………………………………………………………………………………………………………………. 27
Часть VII……………………………………………………………………………………………………………………………… 27
Листинги……………………………………………………………………………………………………………………………… 28
Предметный указатель………………………………………………………………………………………………………. 28
Благодарности от Дмитрия Котерова……………………………………………………………………………………… 28
Благодарности от Игоря Симдянова……………………………………………………………………………………….. 29
Часть I. Основы веб-разработки……………………………………………….. 31
Глава 1. Принципы работы Интернета………………………………………………….. 33
Протоколы передачи данных…………………………………………………………………………………………………… 34
Семейство TCP/IP………………………………………………………………………………………………………………………. 36
Протокол IP………………………………………………………………………………………………………………………………… 37
Версии протокола IP…………………………………………………………………………………………………………………. 38
Доменное имя……………………………………………………………………………………………………………………………… 39
Порт…………………………………………………………………………………………………………………………………………….. 41
Резюме…………………………………………………………………………………………………………………………………………. 42
Глава 2. Протокол HTTP………………………………………………………………………… 43
Зачем нужен протокол HTTP?………………………………………………………………………………………………….. 44
Ресурсы……………………………………………………………………………………………………………………………………….. 44
Параметры URL…………………………………………………………………………………………………………………………. 46
Методы……………………………………………………………………………………………………………………………………….. 47
HTTP-сообщения……………………………………………………………………………………………………………………….. 47
HTTP-заголовки…………………………………………………………………………………………………………………………. 50
Content-Type……………………………………………………………………………………………………………………….. 52
Host………………………………………………………………………………………………………………………………………. 52
User-Agent……………………………………………………………………………………………………………………………. 52
Referer………………………………………………………………………………………………………………………………….. 52
Content-length…………………………………………………………………………………………………………………….. 53
Cookie………………………………………………………………………………………………………………………………….. 53
Accept…………………………………………………………………………………………………………………………………… 53
HTTP-коды ответов……………………………………………………………………………………………………………………. 53
Утилита curl……………………………………………………………………………………………………………………………….. 54
Резюме…………………………………………………………………………………………………………………………………………. 57
Глава 3. Установка PHP…………………………………………………………………………. 58
Установка PHP в Windows…………………………………………………………………………………………………………. 58
Переменная окружения PATH…………………………………………………………………………………………………… 59
Установка PHP в macos…………………………………………………………………………………………………………….. 61
Установка PHP в Linux (Ubuntu)………………………………………………………………………………………………. 62
Проверочный скрипт…………………………………………………………………………………………………………………. 62
Ошибки в скриптах…………………………………………………………………………………………………………………….. 63
Запуск встроенного сервера……………………………………………………………………………………………………… 64
Файл hosts…………………………………………………………………………………………………………………………………… 65
Вещание вовне……………………………………………………………………………………………………………………………. 65
Конфигурирование PHP…………………………………………………………………………………………………………….. 66
Интерактивный PHP…………………………………………………………………………………………………………………… 66
Документация…………………………………………………………………………………………………………………………….. 67
Проверка стиля кода………………………………………………………………………………………………………………….. 67
Docker………………………………………………………………………………………………………………………………………….. 69
Резюме…………………………………………………………………………………………………………………………………………. 73
Часть II. Основы языка PHP…………………………………………………………. 75
Глава 4. Характеристика языка PHP……………………………………………………… 77
Что умеет PHP?…………………………………………………………………………………………………………………………… 77
Веб-программирование до PHP………………………………………………………………………………………………… 77
История PHP……………………………………………………………………………………………………………………………….. 79
Что нового в PHP 8?…………………………………………………………………………………………………………………… 82
Нововведения PHP 7.1……………………………………………………………………………………………………….. 82
Нововведения PHP 7.2……………………………………………………………………………………………………….. 83
Нововведения PHP 7.3……………………………………………………………………………………………………….. 83
Нововведения PHP 7.4……………………………………………………………………………………………………….. 83
Нововведения PHP 8.0……………………………………………………………………………………………………….. 83
Нововведения PHP 8.1……………………………………………………………………………………………………….. 84
Где можно узнать об изменениях в синтаксисе?……………………………………………………………… 84
Пример PHP-программы……………………………………………………………………………………………………………. 84
Начальные и конечные теги……………………………………………………………………………………………………… 85
Использование точки с запятой………………………………………………………………………………………………… 87
Фигурные скобки……………………………………………………………………………………………………………………….. 88
Комментарии……………………………………………………………………………………………………………………………… 89
Включение PHP-файла………………………………………………………………………………………………………………. 91
Элементы языка…………………………………………………………………………………………………………………………. 92
Резюме…………………………………………………………………………………………………………………………………………. 92
Глава 5. Переменные и типы данных…………………………………………………….. 93
Переменные………………………………………………………………………………………………………………………………… 94
Типы переменных………………………………………………………………………………………………………………………. 97
Целые числа: integer……………………………………………………………………………………………………………….. 100
Вещественные числа: double………………………………………………………………………………………………….. 102
Логический тип: boolean…………………………………………………………………………………………………………. 104
Строки: string…………………………………………………………………………………………………………………………… 105
Кавычки…………………………………………………………………………………………………………………………….. 105
Оператор <<<……………………………………………………………………………………………………………………. 108
Устройство строки…………………………………………………………………………………………………………… 109
Массивы: array………………………………………………………………………………………………………………………… 110
Объект: object…………………………………………………………………………………………………………………………… 111
Ресурс: resource……………………………………………………………………………………………………………………….. 111
Специальный тип null……………………………………………………………………………………………………………… 112
Действия с переменными…………………………………………………………………………………………………………. 112
Присвоение значения……………………………………………………………………………………………………….. 112
Уничтожение…………………………………………………………………………………………………………………….. 113
Проверка существования………………………………………………………………………………………………… 113
Определение типа переменной……………………………………………………………………………………………….. 115
Некоторые условные обозначения………………………………………………………………………………………… 116
Неявное приведение типа……………………………………………………………………………………………………….. 117
Явное приведение типа……………………………………………………………………………………………………………. 118
Ссылочные переменные………………………………………………………………………………………………………….. 121
Жесткие ссылки………………………………………………………………………………………………………………… 121
«Сбор мусора»………………………………………………………………………………………………………………….. 122
Символические ссылки……………………………………………………………………………………………………. 123
Ссылки на объекты………………………………………………………………………………………………………….. 124
Отладочные функции………………………………………………………………………………………………………………. 125
Резюме………………………………………………………………………………………………………………………………………. 128
Глава 6. Классы и объекты………………………………………………………………….. 129
Объектно-ориентированное программирование………………………………………………………………….. 129
Коды………………………………………………………………………………………………………………………………….. 129
Ассемблер…………………………………………………………………………………………………………………………. 131
Язык высокого уровня……………………………………………………………………………………………………… 132
Специализированный язык программирования……………………………………………………………. 132
Объектно-ориентированные языки программирования……………………………………………….. 133
Зачем нужны классы?……………………………………………………………………………………………………………… 133
Использование готовых классов…………………………………………………………………………………………….. 134
Создание классов…………………………………………………………………………………………………………………….. 136
Разделение классов и остального кода………………………………………………………………………………….. 138
Создание объекта…………………………………………………………………………………………………………………….. 139
Область видимости переменных класса………………………………………………………………………………… 141
Типы переменных класса………………………………………………………………………………………………………… 141
Спецификаторы доступа…………………………………………………………………………………………………………. 145
Свойства «только для чтения»………………………………………………………………………………………………… 146
Дамп объекта……………………………………………………………………………………………………………………………. 149
Статические переменные класса……………………………………………………………………………………………. 150
Ссылки на переменные……………………………………………………………………………………………………………. 151
Клонирование объектов………………………………………………………………………………………………………….. 152
Резюме………………………………………………………………………………………………………………………………………. 153
Глава 7. Константы……………………………………………………………………………… 154
Предопределенные константы……………………………………………………………………………………………….. 154
Создание константы………………………………………………………………………………………………………………… 156
Проверка существования константы……………………………………………………………………………………… 157
Константы с динамическими именами………………………………………………………………………………….. 157
Абсолютный и относительный пути к файлу………………………………………………………………………… 158
Константы класса……………………………………………………………………………………………………………………. 160
Резюме………………………………………………………………………………………………………………………………………. 161
Глава 8. Операторы……………………………………………………………………………… 162
Оператор «точка с запятой»……………………………………………………………………………………………………. 162
Оператор «точка»…………………………………………………………………………………………………………………….. 163
Оператор «запятая»…………………………………………………………………………………………………………………. 166
Арифметические операторы…………………………………………………………………………………………………… 167
Битовые операторы…………………………………………………………………………………………………………………. 170
Операторы сравнения……………………………………………………………………………………………………………… 176
Особенности операторов == и !=…………………………………………………………………………………… 177
Сравнение вещественных чисел……………………………………………………………………………………… 178
Сравнение строк………………………………………………………………………………………………………………. 179
Сравнение составных переменных………………………………………………………………………………… 180
Оператор эквивалентности……………………………………………………………………………………………… 181
Приоритет операторов……………………………………………………………………………………………………………. 183
Резюме………………………………………………………………………………………………………………………………………. 184
Глава 9. Условия………………………………………………………………………………….. 185
Зачем в программе нужно ветвление?……………………………………………………………………………………. 185
Конструкция if………………………………………………………………………………………………………………………….. 186
Логические операторы……………………………………………………………………………………………………………. 189
Логическое И: оператор &&……………………………………………………………………………………………. 190
Логическое ИЛИ: оператор ||………………………………………………………………………………………….. 190
Логическое отрицание: оператор !…………………………………………………………………………………. 194
Условный оператор x ? y : z…………………………………………………………………………………………………….. 194
Оператор ??……………………………………………………………………………………………………………………………… 196
Конструкция switch………………………………………………………………………………………………………………….. 197
Конструкция match………………………………………………………………………………………………………………….. 201
Конструкция goto…………………………………………………………………………………………………………………….. 204
Резюме………………………………………………………………………………………………………………………………………. 205
Глава 10. Циклы………………………………………………………………………………….. 206
Зачем нужны циклы?……………………………………………………………………………………………………………….. 206
Способы организации циклов в PHP……………………………………………………………………………………… 207
Цикл while…………………………………………………………………………………………………………………………………. 207
Вложенные циклы……………………………………………………………………………………………………………………. 209
Досрочное прекращение циклов…………………………………………………………………………………………….. 212
Цикл do … while………………………………………………………………………………………………………………………… 215
Цикл for…………………………………………………………………………………………………………………………………….. 215
Резюме………………………………………………………………………………………………………………………………………. 219
Глава 11. Ассоциативные массивы………………………………………………………. 220
Создание массива……………………………………………………………………………………………………………………. 220
Ассоциативные и индексные массивы…………………………………………………………………………………… 225
Многомерные массивы……………………………………………………………………………………………………………. 227
Интерполяция элементов массива в строки…………………………………………………………………………… 228
Конструкция list()…………………………………………………………………………………………………………………….. 229
Обход массива…………………………………………………………………………………………………………………………. 230
Цикл foreach……………………………………………………………………………………………………………………………… 230
Сечения массива………………………………………………………………………………………………………………………. 233
Слияние массивов……………………………………………………………………………………………………………………. 235
Сравнение массивов………………………………………………………………………………………………………………… 236
Проверка существования элементов массива……………………………………………………………………….. 240
Строки как массивы…………………………………………………………………………………………………………………. 243
Количество элементов в массиве……………………………………………………………………………………………. 243
Сумма элементов массива………………………………………………………………………………………………………. 245
Случайный элемент массива………………………………………………………………………………………………….. 245
Сортировка массива………………………………………………………………………………………………………………… 247
Добавление/удаление элементов…………………………………………………………………………………………… 254
Работа с ключами массива……………………………………………………………………………………………………… 257
Резюме………………………………………………………………………………………………………………………………………. 260
Глава 12. Функции и области видимости……………………………………………… 261
Зачем нужны функции?…………………………………………………………………………………………………………… 261
Создание функции……………………………………………………………………………………………………………………. 263
Ключевое слово return…………………………………………………………………………………………………….. 264
Объявление и вызов функции………………………………………………………………………………………….. 266
Параметры и аргументы…………………………………………………………………………………………………………. 267
Параметры по умолчанию………………………………………………………………………………………………. 270
Переменное число параметров……………………………………………………………………………………….. 272
Именованные аргументы…………………………………………………………………………………………………. 274
Типы аргументов и возвращаемого значения……………………………………………………………………….. 275
Передача параметров по ссылке……………………………………………………………………………………………. 278
Локальные переменные…………………………………………………………………………………………………………… 278
Глобальные переменные…………………………………………………………………………………………………………. 279
Массив $GLOBALS…………………………………………………………………………………………………………… 280
Как работает инструкция global?…………………………………………………………………………………… 282
Статические переменные………………………………………………………………………………………………………… 283
Резюме………………………………………………………………………………………………………………………………………. 284
Глава 13. Сложные функции………………………………………………………………… 285
Рекурсивные функции……………………………………………………………………………………………………………… 285
Вложенные функции………………………………………………………………………………………………………………… 288
Переменные функции………………………………………………………………………………………………………………. 289
Функции обратного вызова…………………………………………………………………………………………………….. 291
Анонимные функции………………………………………………………………………………………………………………… 300
Замыкания………………………………………………………………………………………………………………………………… 303
Стрелочные функции………………………………………………………………………………………………………………. 304
Резюме………………………………………………………………………………………………………………………………………. 305
Глава 14. Методы класса……………………………………………………………………… 306
Создание метода……………………………………………………………………………………………………………………… 306
Обращение к методам объекта……………………………………………………………………………………………….. 307
Проверка существования метода…………………………………………………………………………………………… 309
Специальные методы………………………………………………………………………………………………………………. 313
Конструктор __construct()………………………………………………………………………………………………………. 314
Параметры конструктора……………………………………………………………………………………………………….. 316
Деструктор __destruct()…………………………………………………………………………………………………………… 319
Методы-аксессоры………………………………………………………………………………………………………………….. 320
Статические методы………………………………………………………………………………………………………………… 325
Класс — self, объект — $this…………………………………………………………………………………………………… 325
Динамические методы…………………………………………………………………………………………………………….. 328
Интерполяция объекта…………………………………………………………………………………………………………….. 331
Тип callable………………………………………………………………………………………………………………………………. 332
Оператор ?->……………………………………………………………………………………………………………………………. 335
Резюме………………………………………………………………………………………………………………………………………. 337
Глава 15. Генераторы…………………………………………………………………………… 338
Отложенные вычисления………………………………………………………………………………………………………… 338
Манипуляция массивами………………………………………………………………………………………………………… 341
Делегирование генераторов……………………………………………………………………………………………………. 343
Экономия ресурсов………………………………………………………………………………………………………………….. 344
Использование ключей……………………………………………………………………………………………………………. 345
Использование ссылки…………………………………………………………………………………………………………….. 346
Связь генераторов c объектами………………………………………………………………………………………………. 347
Резюме………………………………………………………………………………………………………………………………………. 349
Часть III. Обработка текста и язык разметки HTML…………. 351
Глава 16. Строковые функции……………………………………………………………… 353
Кодировки………………………………………………………………………………………………………………………………… 353
Строки как массивы…………………………………………………………………………………………………………………. 357
UTF-8: расширение mbstring…………………………………………………………………………………………………… 358
Поиск в строке………………………………………………………………………………………………………………………….. 360
Отрезание пробелов………………………………………………………………………………………………………………… 361
Замена в тексте………………………………………………………………………………………………………………………… 363
Установка локали (локальных настроек)……………………………………………………………………………… 365
Работа с HTML-кодом…………………………………………………………………………………………………………….. 367
Функции форматных преобразований…………………………………………………………………………………… 373
Объединение и разбиение строк…………………………………………………………………………………………….. 376
Сериализация объектов и массивов……………………………………………………………………………………….. 377
JSON-формат…………………………………………………………………………………………………………………………….. 378
Резюме………………………………………………………………………………………………………………………………………. 381
Глава 17. Язык разметки HTML…………………………………………………………… 382
Зачем нужен HTML?……………………………………………………………………………………………………………….. 382
HTML-код страницы……………………………………………………………………………………………………………….. 383
Устройство HTML-страницы…………………………………………………………………………………………………. 385
Параграф: тег <p>…………………………………………………………………………………………………………… 388
Гиперссылки: тег <a>……………………………………………………………………………………………………… 391
Комментарии……………………………………………………………………………………………………………………. 391
Заголовки: теги <h1>…<h6>………………………………………………………………………………………….. 392
Блоки: тег <div>………………………………………………………………………………………………………………. 392
Списки: теги <ul>, <ol> и <li>…………………………………………………………………………………………… 394
HTML на уровне текста…………………………………………………………………………………………………… 395
Изображения: тег <img>…………………………………………………………………………………………………. 397
Каскадные таблицы стилей……………………………………………………………………………………………………. 399
Резюме………………………………………………………………………………………………………………………………………. 402
Глава 18. Работа с данными формы……………………………………………………… 403
Передача параметров методом GET……………………………………………………………………………………… 403
HTML-форма и ее обработчик……………………………………………………………………………………………….. 406
Текстовое поле…………………………………………………………………………………………………………………………. 411
Поле для приема пароля…………………………………………………………………………………………………………. 411
Текстовая область……………………………………………………………………………………………………………………. 412
Скрытое поле……………………………………………………………………………………………………………………………. 414
Флажок……………………………………………………………………………………………………………………………………… 415
Список………………………………………………………………………………………………………………………………………. 417
Переключатель………………………………………………………………………………………………………………………… 419
Переадресация…………………………………………………………………………………………………………………………. 420
Резюме………………………………………………………………………………………………………………………………………. 423
Глава 19. Загрузка файлов на сервер……………………………………………………. 424
Multipart-формы………………………………………………………………………………………………………………………. 424
Тег выбора файла…………………………………………………………………………………………………………………….. 425
Закачка файлов и безопасность……………………………………………………………………………………………… 425
Поддержка закачки в PHP……………………………………………………………………………………………………….. 426
Простые имена полей закачки………………………………………………………………………………………… 426
Получение закачанного файла……………………………………………………………………………………….. 428
Пример: фотоальбом……………………………………………………………………………………………………….. 429
Сложные имена полей……………………………………………………………………………………………………… 432
Резюме………………………………………………………………………………………………………………………………………. 434
Глава 20. Суперглобальные массивы…………………………………………………… 435
Типы суперглобальных массивов………………………………………………………………………………………….. 435
Cookie……………………………………………………………………………………………………………………………………….. 436
Сессии……………………………………………………………………………………………………………………………………….. 438
Переменные окружения…………………………………………………………………………………………………………… 440
Массив $_SERVER…………………………………………………………………………………………………………………… 441
Элемент $_SERVER[‘DOCUMENT_ROOT’]……………………………………………………………………. 441
Элемент $_SERVER[‘HTTP_ACCEPT’]…………………………………………………………………………… 441
Элемент $_SERVER[‘HTTP_HOST’]………………………………………………………………………………… 442
Элемент $_SERVER[‘HTTP_REFERER’]…………………………………………………………………………. 442
Элемент $_SERVER[‘HTTP_USER_AGENT’]………………………………………………………………….. 443
Элемент $_SERVER[‘REMOTE_ADDR’]………………………………………………………………………….. 443
Элемент $_SERVER[‘SCRIPT_FILENAME’]……………………………………………………………………. 443
Элемент $_SERVER[‘SERVER_NAME’]………………………………………………………………………….. 444
Элемент $_SERVER[‘REQUEST_METHOD’]…………………………………………………………………… 444
Элемент $_SERVER[‘QUERY_STRING’]………………………………………………………………………….. 444
Элемент $_SERVER[‘PHP_SELF’]…………………………………………………………………………………… 445
Элемент $_SERVER[‘REQUEST_URI’]……………………………………………………………………………. 445
Резюме………………………………………………………………………………………………………………………………………. 446
Глава 21. Фильтрация и проверка данных…………………………………………… 447
Фильтрация или проверка?…………………………………………………………………………………………………….. 447
Проверка данных…………………………………………………………………………………………………………………….. 449
Фильтры проверки…………………………………………………………………………………………………………………… 450
Значения по умолчанию…………………………………………………………………………………………………………. 455
Фильтры очистки……………………………………………………………………………………………………………………… 456
Пользовательская фильтрация данных…………………………………………………………………………………. 459
Фильтрация внешних данных…………………………………………………………………………………………………. 460
Конфигурационный файл php.ini…………………………………………………………………………………………… 462
Резюме………………………………………………………………………………………………………………………………………. 463
Часть IV. Стандартные функции PHP…………………………………….. 465
Глава 22. Математические функции…………………………………………………….. 467
Встроенные константы……………………………………………………………………………………………………………. 467
Функции округления………………………………………………………………………………………………………………… 468
Функция abs()……………………………………………………………………………………………………………………. 468
Функция round()……………………………………………………………………………………………………………….. 468
Функция ceil()……………………………………………………………………………………………………………………. 469
Функция floor()…………………………………………………………………………………………………………………. 470
Случайные числа…………………………………………………………………………………………………………………….. 470
Функция rand()………………………………………………………………………………………………………………….. 470
Функция getrandmax()………………………………………………………………………………………………………. 472
Функция random_int()………………………………………………………………………………………………………. 472
Перевод в различные системы счисления……………………………………………………………………………… 472
Функция base_convert()……………………………………………………………………………………………………. 472
Функции bindec(), hexdec() и octdec()……………………………………………………………………………… 473
Функции decbin(), decoct() и dechex()……………………………………………………………………………… 473
Минимум и максимум……………………………………………………………………………………………………………… 473
Функция min()……………………………………………………………………………………………………………………. 473
Функция max()…………………………………………………………………………………………………………………… 473
Не-числа…………………………………………………………………………………………………………………………………… 474
Функция is_nan()………………………………………………………………………………………………………………. 474
Функция is_infinite()…………………………………………………………………………………………………………. 474
Степенные функции…………………………………………………………………………………………………………………. 474
Функция sqrt()…………………………………………………………………………………………………………………… 474
Функция log()……………………………………………………………………………………………………………………. 475
Функция exp()……………………………………………………………………………………………………………………. 475
Функция pow()…………………………………………………………………………………………………………………… 475
Тригонометрия…………………………………………………………………………………………………………………………. 475
Резюме………………………………………………………………………………………………………………………………………. 477
Глава 23. Работа с файлами………………………………………………………………….. 478
О текстовых и бинарных файлах……………………………………………………………………………………………. 478
Открытие файла……………………………………………………………………………………………………………………….. 479
Различия текстового и бинарного режимов…………………………………………………………………… 481
Сетевые соединения…………………………………………………………………………………………………………. 481
Прямые и обратные слеши………………………………………………………………………………………………. 482
Безымянные временные файлы……………………………………………………………………………………….. 483
Закрытие файла……………………………………………………………………………………………………………………….. 483
Чтение и запись………………………………………………………………………………………………………………………… 483
Блочные чтение/запись……………………………………………………………………………………………………. 484
Построчные чтение/запись……………………………………………………………………………………………… 485
Чтение CSV-файла……………………………………………………………………………………………………………. 485
Положение указателя текущей позиции………………………………………………………………………………… 486
Работа с путями……………………………………………………………………………………………………………………….. 488
Манипулирование целыми файлами……………………………………………………………………………………… 490
Чтение и запись целого файла………………………………………………………………………………………… 490
Чтение INI-файла……………………………………………………………………………………………………………… 492
Другие функции……………………………………………………………………………………………………………………….. 493
Блокирование файла……………………………………………………………………………………………………………….. 494
Рекомендательная и жесткая блокировки……………………………………………………………………… 494
Функция flock()…………………………………………………………………………………………………………………. 495
Типы блокировок……………………………………………………………………………………………………………… 495
Исключительная блокировка…………………………………………………………………………………. 495
«Не убий!»……………………………………………………………………………………………………….. 496
«Посади дерево»……………………………………………………………………………………………… 497
«Следи за собой, будь осторожен»……………………………………………………………….. 497
Выводы……………………………………………………………………………………………………………. 498
Разделяемая блокировка………………………………………………………………………………………… 498
Выводы……………………………………………………………………………………………………………. 500
Блокировки с запретом «подвисания»……………………………………………………………………………. 500
Пример счетчика………………………………………………………………………………………………………………. 500
Резюме………………………………………………………………………………………………………………………………………. 501
Глава 24. Работа с каталогами……………………………………………………………… 502
Текущий каталог……………………………………………………………………………………………………………………… 502
Создание каталога…………………………………………………………………………………………………………………… 503
Работа с записями……………………………………………………………………………………………………………………. 504
Рекурсивный обход каталога…………………………………………………………………………………………………. 505
Фильтрация содержимого каталога………………………………………………………………………………………. 506
Удаление каталога………………………………………………………………………………………………………………….. 508
Класс Directory…………………………………………………………………………………………………………………………. 509
Резюме………………………………………………………………………………………………………………………………………. 511
Глава 25. Права доступа и атрибуты файлов……………………………………….. 512
Идентификатор пользователя…………………………………………………………………………………………………. 512
Идентификатор группы…………………………………………………………………………………………………………… 513
Владелец файла……………………………………………………………………………………………………………………….. 514
Права доступа………………………………………………………………………………………………………………………….. 514
Числовое представление прав доступа………………………………………………………………………….. 515
Особенности каталогов…………………………………………………………………………………………………… 515
Примеры……………………………………………………………………………………………………………………………. 517
Домашний каталог пользователя………………………………………………………………………….. 517
Защищенный от записи файл…………………………………………………………………………………. 517
CGI-скрипт………………………………………………………………………………………………………………. 517
Системные утилиты………………………………………………………………………………………………… 517
Закрытые системные файлы………………………………………………………………………………….. 518
Функции PHP……………………………………………………………………………………………………………………………. 518
Назначение прав доступа……………………………………………………………………………………………….. 518
Определение атрибутов файла……………………………………………………………………………………….. 520
Специальные функции……………………………………………………………………………………………. 521
Определение типа файла……………………………………………………………………………………….. 522
Определение возможности доступа……………………………………………………………………………….. 523
Ссылки………………………………………………………………………………………………………………………………………. 524
Символические ссылки……………………………………………………………………………………………………. 524
Жесткие ссылки………………………………………………………………………………………………………………… 524
Резюме………………………………………………………………………………………………………………………………………. 525
Глава 26. Запуск внешних программ……………………………………………………. 526
Запуск утилит…………………………………………………………………………………………………………………………… 526
Оператор «обратные кавычки»………………………………………………………………………………………………. 528
Экранирование командной строки………………………………………………………………………………………… 528
Каналы……………………………………………………………………………………………………………………………………… 529
Временные файлы……………………………………………………………………………………………………………. 529
Открытие канала……………………………………………………………………………………………………………… 530
Взаимная блокировка (deadlock)……………………………………………………………………………………. 531
Резюме………………………………………………………………………………………………………………………………………. 533
Глава 27. Работа с датой и временем……………………………………………………. 534
Представление времени в формате timestamp………………………………………………………………………. 534
Вычисление времени работы скрипта……………………………………………………………………………. 535
Большие вещественные числа………………………………………………………………………………………… 536
Построение строкового представления даты………………………………………………………………… 537
Построение timestamp……………………………………………………………………………………………………… 539
Разбор timestamp……………………………………………………………………………………………………………… 541
Календарик………………………………………………………………………………………………………………………………. 542
Географическая привязка……………………………………………………………………………………………………….. 544
Хранение абсолютного времени…………………………………………………………………………………….. 547
Перевод времени………………………………………………………………………………………………………………. 548
Окончательное решение задачи……………………………………………………………………………………… 549
Календарные классы PHP………………………………………………………………………………………………………. 549
Класс DateTime…………………………………………………………………………………………………………………. 549
Класс DateTimeZone…………………………………………………………………………………………………………. 551
Класс DateInterval……………………………………………………………………………………………………………. 551
Класс DatePeriod……………………………………………………………………………………………………………… 553
Резюме………………………………………………………………………………………………………………………………………. 554
Глава 28. Основы регулярных выражений…………………………………………… 555
Начнем с примеров………………………………………………………………………………………………………………….. 555
Пример первый…………………………………………………………………………………………………………………. 555
Пример второй………………………………………………………………………………………………………………….. 556
Пример третий………………………………………………………………………………………………………………….. 556
Пример четвертый……………………………………………………………………………………………………………. 557
Что такое регулярные выражения?………………………………………………………………………………………… 558
Терминология…………………………………………………………………………………………………………………………… 558
Использование регулярных выражений в PHP……………………………………………………………………… 559
Сопоставление…………………………………………………………………………………………………………………. 559
Сопоставление с заменой………………………………………………………………………………………………… 560
Язык регулярных выражений…………………………………………………………………………………………………. 561
Ограничители…………………………………………………………………………………………………………………… 561
Альтернативные ограничители……………………………………………………………………………… 562
Отмена действия спецсимволов…………………………………………………………………………….. 563
Простые символы…………………………………………………………………………………………………………….. 564
Классы символов…………………………………………………………………………………………………….. 564
Альтернативы………………………………………………………………………………………………………….. 564
Отрицательные классы…………………………………………………………………………………………… 566
Квантификаторы повторений…………………………………………………………………………………………. 566
Ноль или более совпадений…………………………………………………………………………………… 566
Одно или более совпадений…………………………………………………………………………………… 566
Ноль или одно совпадение…………………………………………………………………………………….. 567
Заданное число совпадений………………………………………………………………………………….. 567
Мнимые символы……………………………………………………………………………………………………………… 567
Оператор альтернативы………………………………………………………………………………………………….. 568
Группирующие скобки…………………………………………………………………………………………………….. 568
«Карманы»………………………………………………………………………………………………………………………… 568
Карманы в функции замены…………………………………………………………………………………… 570
Карманы в функции сопоставления………………………………………………………………………. 571
Игнорирование карманов………………………………………………………………………………………. 572
Именованные карманы…………………………………………………………………………………………… 572
«Жадность» квантификаторов………………………………………………………………………………………… 572
Рекуррентные структуры……………………………………………………………………………………….. 574
Модификаторы…………………………………………………………………………………………………………………. 574
Модификатор /i — игнорирование регистра……………………………………………………….. 574
Модификатор /x — пропуск пробелов и комментариев………………………………………. 574
Модификатор /m — многострочность…………………………………………………………………… 575
Модификатор /s — однострочный поиск……………………………………………………………… 576
Модификатор /u — UTF-8………………………………………………………………………………………. 576
Модификатор /U — инвертируем «жадность»……………………………………………………… 576
Незахватывающий поиск………………………………………………………………………………………………… 576
Позитивный просмотр вперед………………………………………………………………………………… 576
Негативный просмотр вперед………………………………………………………………………………… 577
Позитивный просмотр назад………………………………………………………………………………….. 577
Негативный просмотр назад………………………………………………………………………………….. 578
Другие возможности регулярных выражений……………………………………………………………….. 578
Функции PHP……………………………………………………………………………………………………………………………. 578
Поиск совпадений…………………………………………………………………………………………………………….. 578
Замена совпадений………………………………………………………………………………………………………….. 582
Разбиение по регулярному выражению…………………………………………………………………………. 585
Выделение всех уникальных слов из текста………………………………………………………… 585
Экранирование символов………………………………………………………………………………………………… 586
Фильтрация массива………………………………………………………………………………………………………… 587
Примеры регулярных выражений………………………………………………………………………………………….. 588
Преобразование адресов e-mail……………………………………………………………………………………… 588
Преобразование гиперссылок…………………………………………………………………………………………. 588
Быть или не быть?……………………………………………………………………………………………………………………. 589
Ссылки………………………………………………………………………………………………………………………………………. 590
Резюме………………………………………………………………………………………………………………………………………. 590
Глава 29. Разные функции…………………………………………………………………… 591
Информационные функции……………………………………………………………………………………………………… 591
Принудительное завершение программы……………………………………………………………………………… 593
Генерация кода во время выполнения……………………………………………………………………………………. 593
Функции хеширования…………………………………………………………………………………………………………….. 595
Подсветка PHP-кода………………………………………………………………………………………………………………… 600
Резюме………………………………………………………………………………………………………………………………………. 601
Часть V. Основы объектно-ориентированного программирования 603
Глава 30. Наследование……………………………………………………………………….. 605
Расширение класса………………………………………………………………………………………………………………….. 606
Метод включения…………………………………………………………………………………………………………….. 607
Недостатки метода включения……………………………………………………………………………… 608
Несовместимость типов………………………………………………………………………………………….. 609
Наследование…………………………………………………………………………………………………………………… 609
Переопределение методов………………………………………………………………………………………………. 611
Модификаторы доступа при переопределении…………………………………………………… 611
Доступ к методам базового класса……………………………………………………………………….. 611
Финальные методы…………………………………………………………………………………………………. 612
Запрет наследования……………………………………………………………………………………………… 612
Константы __CLASS__ и __METHOD__………………………………………………………………………… 613
Позднее статическое связывание……………………………………………………………………………………. 613
Анонимные классы………………………………………………………………………………………………………………….. 614
Полиморфизм……………………………………………………………………………………………………………………………. 616
Абстрагирование……………………………………………………………………………………………………………… 616
Виртуальные методы………………………………………………………………………………………………………. 621
Расширение иерархии……………………………………………………………………………………………………… 625
Абстрактные классы и методы……………………………………………………………………………………………….. 625
Совместимость родственных типов……………………………………………………………………………………….. 627
Уточнение типа в функциях…………………………………………………………………………………………….. 627
Оператор instanceof…………………………………………………………………………………………………………. 628
Обратное преобразование типа……………………………………………………………………………………… 629
Резюме………………………………………………………………………………………………………………………………………. 629
Глава 31. Интерфейсы………………………………………………………………………….. 630
Ограничения наследования…………………………………………………………………………………………………….. 630
Создание интерфейса………………………………………………………………………………………………………………. 633
Наследование интерфейсов……………………………………………………………………………………………………. 635
Реализация нескольких интерфейсов…………………………………………………………………………………….. 638
Реализует ли объект интерфейс?……………………………………………………………………………………………. 640
Резюме………………………………………………………………………………………………………………………………………. 641
Глава 32. Трейты………………………………………………………………………………….. 642
Создание трейта………………………………………………………………………………………………………………………. 642
Трейты и наследование…………………………………………………………………………………………………………… 645
Разрешение конфликтов………………………………………………………………………………………………………….. 648
Вложенные трейты………………………………………………………………………………………………………………….. 650
Резюме………………………………………………………………………………………………………………………………………. 651
Глава 33. Перечисления……………………………………………………………………….. 652
Создание перечисления…………………………………………………………………………………………………………… 652
Типизированные перечисления………………………………………………………………………………………………. 655
Сравнение значений………………………………………………………………………………………………………………… 658
Перечисления как классы……………………………………………………………………………………………………….. 658
Ограничения перечислений…………………………………………………………………………………………….. 658
Методы перечислений…………………………………………………………………………………………………….. 659
Использование трейтов……………………………………………………………………………………………………. 662
Константы………………………………………………………………………………………………………………………… 663
Резюме………………………………………………………………………………………………………………………………………. 664
Глава 34. Исключения………………………………………………………………………….. 665
Базовый синтаксис…………………………………………………………………………………………………………………… 665
Конструкция throw…………………………………………………………………………………………………………………… 667
Раскрутка стека……………………………………………………………………………………………………………………….. 667
Исключения и деструкторы…………………………………………………………………………………………………….. 668
Интерфейс класса Exception…………………………………………………………………………………………………… 670
Генерация исключений в классах………………………………………………………………………………………….. 672
Создание собственных исключений………………………………………………………………………………………. 675
Перехват собственных исключений………………………………………………………………………………………. 678
Повторная генерация исключений…………………………………………………………………………………………. 679
Блок finally……………………………………………………………………………………………………………………………….. 681
Использование интерфейсов…………………………………………………………………………………………………… 682
Резюме………………………………………………………………………………………………………………………………………. 684
Глава 35. Обработка ошибок……………………………………………………………….. 685
Что такое ошибка?…………………………………………………………………………………………………………………… 685
Роли ошибок……………………………………………………………………………………………………………………… 686
Виды ошибок……………………………………………………………………………………………………………………. 686
Ошибки и исключения……………………………………………………………………………………………………………… 687
Контроль ошибок…………………………………………………………………………………………………………………….. 689
Директивы контроля ошибок………………………………………………………………………………………….. 689
Установка режима вывода ошибок………………………………………………………………………………… 691
Оператор отключения ошибок……………………………………………………………………………………….. 692
Предостережения……………………………………………………………………………………………………. 693
Перехват ошибок……………………………………………………………………………………………………………… 693
Проблемы с оператором @……………………………………………………………………………………. 695
Генерация ошибок……………………………………………………………………………………………………………. 696
Стек вызовов функций……………………………………………………………………………………………………… 697
Резюме………………………………………………………………………………………………………………………………………. 699
Глава 36. Пространство имен……………………………………………………………….. 700
Проблема именования…………………………………………………………………………………………………………….. 700
Объявление пространства имен……………………………………………………………………………………………… 701
Иерархия пространства имен…………………………………………………………………………………………………. 705
Текущее пространство имен…………………………………………………………………………………………………… 706
Импортирование………………………………………………………………………………………………………………………. 707
Автозагрузка классов………………………………………………………………………………………………………………. 708
Функция spl_autoload_register()……………………………………………………………………………………… 708
Резюме………………………………………………………………………………………………………………………………………. 711
Глава 37. Шаблоны проектирования……………………………………………………. 712
Зачем нужны шаблоны проектирования?……………………………………………………………………………… 713
Одиночка (Singleton)………………………………………………………………………………………………………………… 713
Фабричный метод (Factory Method)………………………………………………………………………………………. 715
Модель-Представление-Контроллер…………………………………………………………………………………….. 720
Резюме………………………………………………………………………………………………………………………………………. 731
Глава 38. Итераторы…………………………………………………………………………….. 732
Стандартное поведение foreach…………………………………………………………………………………………….. 732
Интерфейсы для создания итераторов…………………………………………………………………………………… 733
Интерфейс Iterator……………………………………………………………………………………………………………. 734
Интерфейс IteratorAggregate…………………………………………………………………………………………… 736
Пример собственного итератора……………………………………………………………………………………. 737
Как PHP обрабатывает итераторы?………………………………………………………………………………………. 740
Множественные итераторы……………………………………………………………………………………………………. 740
Виртуальные массивы…………………………………………………………………………………………………………….. 741
Библиотека SPL……………………………………………………………………………………………………………………….. 743
Класс ArrayObject…………………………………………………………………………………………………………….. 744
Класс DirectoryIterator…………………………………………………………………………………………………….. 744
Класс FilterIterator…………………………………………………………………………………………………………… 745
Класс LimitIterator……………………………………………………………………………………………………………. 746
Рекурсивные итераторы………………………………………………………………………………………………….. 747
Резюме………………………………………………………………………………………………………………………………………. 748
Глава 39. Отражения……………………………………………………………………………. 749
Механизм отражений………………………………………………………………………………………………………………. 749
Отражение функции: ReflectionFunction……………………………………………………………………….. 750
Отражение параметра функции: ReflectionParameter………………………………………………….. 753
Отражение класса: ReflectionClass………………………………………………………………………………… 755
Пояснение: отражения и наследование…………………………………………………………………………. 760
Отражение свойства класса: ReflectionProperty…………………………………………………………… 762
Отражение метода класса: ReflectionMethod………………………………………………………………… 763
Отражение библиотеки расширения: ReflectionExtension……………………………………………. 765
Полезное добавление: класс Reflection………………………………………………………………………….. 766
Обработка исключений: ReflectionException………………………………………………………………… 767
Иерархия…………………………………………………………………………………………………………………………… 767
Резюме………………………………………………………………………………………………………………………………………. 767
Часть VI. Расширения PHP………………………………………………………….. 769
Глава 40. Подключение и настройка расширений……………………………….. 771
Подключение расширений……………………………………………………………………………………………………… 771
Конфигурационный файл php.ini…………………………………………………………………………………………… 773
Структура php.ini…………………………………………………………………………………………………………….. 773
Параметры языка PHP……………………………………………………………………………………………………… 774
Ограничение ресурсов…………………………………………………………………………………………………….. 776
Загрузка файлов……………………………………………………………………………………………………………….. 777
Обзор расширений…………………………………………………………………………………………………………………… 777
Резюме………………………………………………………………………………………………………………………………………. 778
Глава 41. Работа с PostgreSQL……………………………………………………………… 779
Что такое база данных?………………………………………………………………………………………………………….. 780
Неудобство работы с файлами………………………………………………………………………………………. 780
Почему PostgreSQL?…………………………………………………………………………………………………………. 781
Установка PostgreSQL……………………………………………………………………………………………………………… 782
Установка в Windows……………………………………………………………………………………………………….. 782
Установка в macos…………………………………………………………………………………………………………… 784
Установка в Linux Ubuntu……………………………………………………………………………………………….. 784
Администрирование базы данных…………………………………………………………………………………. 785
Введение в СУБД и SQL………………………………………………………………………………………………………….. 785
Первичные ключи…………………………………………………………………………………………………………….. 788
Управление базами данных……………………………………………………………………………………………. 790
Управление таблицами……………………………………………………………………………………………………. 792
Создание таблицы………………………………………………………………………………………………….. 792
Извлечение структуры таблицы……………………………………………………………………………. 793
Изменение структуры таблицы……………………………………………………………………………… 793
Удаление таблицы………………………………………………………………………………………………….. 796
Комментарии в SQL…………………………………………………………………………………………………………. 797
Вставка записей в таблицу……………………………………………………………………………………………… 798
Удаление записей…………………………………………………………………………………………………………….. 801
Обновление записей…………………………………………………………………………………………………………. 802
Выборка данных………………………………………………………………………………………………………………. 803
Условная выборка…………………………………………………………………………………………………… 804
Псевдонимы столбцов…………………………………………………………………………………………….. 807
Сортировка записей……………………………………………………………………………………………….. 808
Вывод записей в случайном порядке……………………………………………………………………. 811
Ограничение выборки…………………………………………………………………………………………….. 811
Вывод уникальных значений…………………………………………………………………………………. 812
Резюме………………………………………………………………………………………………………………………………………. 813
Глава 42. Расширение PDO………………………………………………………………….. 814
Настройка PDO………………………………………………………………………………………………………………………… 814
Установка соединения с базой данных…………………………………………………………………………………. 815
Выполнение SQL-запросов……………………………………………………………………………………………………… 816
Обработка ошибок…………………………………………………………………………………………………………………… 817
Извлечение данных………………………………………………………………………………………………………………….. 818
Параметризация SQL-запросов………………………………………………………………………………………………. 820
Заполнение связанных таблиц……………………………………………………………………………………………….. 822
Резюме………………………………………………………………………………………………………………………………………. 824
Глава 43. Работа с изображениями……………………………………………………….. 825
Универсальная функция getimagesize()………………………………………………………………………………….. 826
Работа с изображениями и библиотека GD…………………………………………………………………………… 827
Пример создания изображения………………………………………………………………………………………………. 828
Создание изображения……………………………………………………………………………………………………………. 829
Загрузка изображения…………………………………………………………………………………………………………….. 829
Определение параметров изображения…………………………………………………………………………………. 830
Сохранение изображения……………………………………………………………………………………………………….. 831
Преобразование изображения в палитровое………………………………………………………………………… 832
Работа с цветом в формате RGB…………………………………………………………………………………………….. 832
Создание нового цвета…………………………………………………………………………………………………….. 832
Текстовое представление цвета……………………………………………………………………………………… 833
Получение ближайшего в палитре цвета………………………………………………………………………. 833
Эффект прозрачности………………………………………………………………………………………………………. 834
Получение RGB-составляющих……………………………………………………………………………………… 835
Использование полупрозрачных цветов……………………………………………………………………….. 835
Графические примитивы…………………………………………………………………………………………………………. 836
Копирование изображений……………………………………………………………………………………………… 836
Прямоугольники……………………………………………………………………………………………………………….. 838
Выбор пера……………………………………………………………………………………………………………………….. 839
Линии………………………………………………………………………………………………………………………………… 840
Дуга сектора…………………………………………………………………………………………………………………….. 840
Закраска произвольной области…………………………………………………………………………………….. 841
Закраска текстурой………………………………………………………………………………………………………….. 841
Многоугольники………………………………………………………………………………………………………………. 842
Работа с пикселами………………………………………………………………………………………………………….. 843
Работа с фиксированными шрифтами……………………………………………………………………………………. 843
Загрузка шрифта………………………………………………………………………………………………………………. 844
Параметры шрифта………………………………………………………………………………………………………….. 844
Вывод строки……………………………………………………………………………………………………………………. 844
Работа со шрифтами TrueType……………………………………………………………………………………………….. 845
Вывод строки……………………………………………………………………………………………………………………. 845
Проблемы с русскими буквами……………………………………………………………………………………….. 846
Определение границ строки……………………………………………………………………………………………. 846
Коррекция функции imageTtfBBox()……………………………………………………………………………….. 847
Пример………………………………………………………………………………………………………………………………. 849
Резюме………………………………………………………………………………………………………………………………………. 851
Глава 44. Работа с сетью………………………………………………………………………. 852
Файловые функции и потоки…………………………………………………………………………………………………… 852
Другие схемы……………………………………………………………………………………………………………………. 853
Контекст потока……………………………………………………………………………………………………………….. 854
Работа с сокетами……………………………………………………………………………………………………………………. 857
«Эмуляция» браузера………………………………………………………………………………………………………. 858
Неблокирующее чтение…………………………………………………………………………………………………… 859
Функции для работы с DNS…………………………………………………………………………………………………….. 859
Расширение CURL…………………………………………………………………………………………………………………… 860
Отправка данных методом POST……………………………………………………………………………………………. 865
Передача пользовательского агента……………………………………………………………………………………… 867
Резюме………………………………………………………………………………………………………………………………………. 868
Глава 45. NoSQL-база данных Redis…………………………………………………….. 869
Почему Redis?…………………………………………………………………………………………………………………………… 870
Установка сервера Redis…………………………………………………………………………………………………………. 871
В среде Linux Ubuntu……………………………………………………………………………………………………….. 871
В среде macos…………………………………………………………………………………………………………………… 871
В среде Windows………………………………………………………………………………………………………………. 871
Проверка работоспособности………………………………………………………………………………………… 872
Клиент redis-cli………………………………………………………………………………………………………………………….. 872
Вставка и получение значений………………………………………………………………………………………………. 873
Обновление и удаление значений………………………………………………………………………………………….. 874
Управление ключами………………………………………………………………………………………………………………. 876
Время жизни ключа…………………………………………………………………………………………………………………. 876
Типы данных……………………………………………………………………………………………………………………………. 877
Хеш …………………………………………………………………………………………………………………………………………… 878
Множество……………………………………………………………………………………………………………………………….. 879
Отсортированное множество………………………………………………………………………………………………….. 881
Базы данных…………………………………………………………………………………………………………………………….. 882
Производительность Redis………………………………………………………………………………………………………. 883
PHP-расширение Redis…………………………………………………………………………………………………………….. 884
Установка расширения php-redis……………………………………………………………………………………. 884
Хранение сессий в Redis………………………………………………………………………………………………….. 885
Методы для обслуживания данных в Redis…………………………………………………………………… 886
Кеширование данных………………………………………………………………………………………………………. 888
Резюме………………………………………………………………………………………………………………………………………. 893
Часть VII. Компоненты………………………………………………………………. 895
Глава 46. Управление компонентами…………………………………………………… 897
Composer: управление компонентами…………………………………………………………………………………… 897
Установка Composer……………………………………………………………………………………………………………….. 898
Установка в Windows……………………………………………………………………………………………………….. 898
Установка в macos…………………………………………………………………………………………………………… 900
Установка в Linux Ubuntu……………………………………………………………………………………………….. 900
Где искать компоненты?…………………………………………………………………………………………………………. 900
Установка компонента……………………………………………………………………………………………………………. 900
Использование компонента…………………………………………………………………………………………………….. 903
Полезные компоненты…………………………………………………………………………………………………………….. 904
Компонент psySH: интерактивный отладчик………………………………………………………………… 904
Компонент phinx: миграции……………………………………………………………………………………………. 905
Инициализация компонента…………………………………………………………………………………… 906
Подготовка миграций……………………………………………………………………………………………… 908
Выполнение миграций……………………………………………………………………………………………. 911
Откат миграций……………………………………………………………………………………………………….. 912
Операции со столбцами…………………………………………………………………………………………. 913
Подготовка тестовых данных………………………………………………………………………………… 914
Резюме………………………………………………………………………………………………………………………………………. 916
Глава 47. Стандарты PSR…………………………………………………………………….. 917
PSR-стандарты…………………………………………………………………………………………………………………………. 917
PSR-1: основной стандарт кодирования……………………………………………………………………………….. 918
PHP-теги……………………………………………………………………………………………………………………………. 919
Кодировка UTF-8……………………………………………………………………………………………………………… 919
Разделение объявлений и выполнения действий…………………………………………………………… 919
Пространство имен………………………………………………………………………………………………………….. 920
Именование классов, методов и констант классов……………………………………………………….. 920
PSR-12. Руководство по стилю кода………………………………………………………………………………………. 921
Соблюдение PSR-1…………………………………………………………………………………………………………… 921
Отступы…………………………………………………………………………………………………………………………….. 921
Файлы……………………………………………………………………………………………………………………………….. 922
Строки……………………………………………………………………………………………………………………………….. 922
Ключевые слова……………………………………………………………………………………………………………….. 922
Пространства имен………………………………………………………………………………………………………….. 922
Классы………………………………………………………………………………………………………………………………. 923
Методы……………………………………………………………………………………………………………………………… 924
Управляющие структуры………………………………………………………………………………………………… 925
Автоматическая проверка стиля…………………………………………………………………………………….. 926
PSR-4: автозагрузка…………………………………………………………………………………………………………………. 927
Резюме………………………………………………………………………………………………………………………………………. 927
Глава 48. Документирование……………………………………………………………….. 928
Установка…………………………………………………………………………………………………………………………………. 928
Документирование PHP-элементов………………………………………………………………………………………… 928
Теги 930
Резюме………………………………………………………………………………………………………………………………………. 933
Глава 49. Атрибуты……………………………………………………………………………… 934
Синтаксис…………………………………………………………………………………………………………………………………. 935
Отражения для работы атрибутами………………………………………………………………………………………. 937
Класс атрибута………………………………………………………………………………………………………………………… 938
Аргументы атрибутов……………………………………………………………………………………………………………… 940
Резюме………………………………………………………………………………………………………………………………………. 942
Глава 50. Разработка собственного компонента…………………………………… 943
Имя компонента и пространство имен…………………………………………………………………………………… 943
Организация компонента………………………………………………………………………………………………………… 944
Реализация компонента…………………………………………………………………………………………………………… 947
Базовый класс навигации Pager……………………………………………………………………………………… 948
Постраничная навигация по содержимому папки………………………………………………………… 951
Базовый класс представления View……………………………………………………………………………….. 954
Представление: список страниц……………………………………………………………………………………… 955
Собираем все вместе………………………………………………………………………………………………………… 957
Постраничная навигация по содержимому файла……………………………………………………….. 958
Постраничная навигация по содержимому базы данных……………………………………………. 962
Представление: диапазон элементов……………………………………………………………………………… 966
Публикация компонента…………………………………………………………………………………………………………. 970
Зачем разрабатывать собственные компоненты?………………………………………………………………… 972
Резюме………………………………………………………………………………………………………………………………………. 972
Заключение………………………………………………………………………………………….. 973
Приложение. Описание электронного архива………………………………………. 975
Предметный указатель…………………………………………………………………………. 976
-
PHP 8
1875 ₽
1594 ₽