Предисловие....12
Объектно-ориентированный подход....12
PostgreSQL и Redis....12
Задания....13
Исходные коды....13
Благодарности....14
Глава 1. Что представляет собой РНР?....16
1.1. Достоинства и недостатки....16
1.2. Структура РНР....18
1.3. Сопутствующие технологии....18
Задание....19
Глава 2. Установка РНР....20
2.1. Установка в Windows....20
2.2. Установка в Mac OS X....22
2.3. Установка в Linux (Ubuntu)....23
2.4. Встроенный сервер....23
2.5. Файл hosts....24
2.6. Вещание вовне....25
2.7. Настройка РНР....25
2.8. Расширения....27
2.9. Документация....28
Задания....28
Глава 3. Быстрый старт....30
3.1. Скрипты....30
3.2. Начальные и конечные теги....32
3.3. Использование точки с запятой....33
3.4. Составные выражения. Фигурные скобки....34
3.5. Комментарии....35
3.6. Включение РНР-файла....37
Задания....38
Глава 4. Переменные и типы данных....40
4.1. Объявление переменной. Оператор =....40
4.2. Типы данных....41
4.3. Целые числа....42
4.4. Вещественные числа....43
4.5. Логический тип....44
4.6. Строки....45
4.7. Кавычки....45
4.8. Оператор <<<....48
4.9. Обращение к неинициализированной переменной. Замечания (Notice)....49
4.10. Специальный тип null....49
4.11. Уничтожение переменной. Конструкция unsetQ....50
4.12. Проверка существования переменной. Конструкции issetQ и emptyQ....51
4.13. Определение типа переменной....53
4.14. Неявное приведение типов....55
4.15. Явное приведение типов....56
4.16. Динамические переменные....59
Задания....60
Глава 5. Классы и объекты....62
5.1. Собственные типы данных....62
5.2. Создание класса....63
5.3. Разделение классов и остального кода....64
5.4. Создание объекта....66
5.5. Область видимости переменных класса....67
5.6. Спецификаторы доступа....68
5.7. Статические переменные класса....69
5.8. Ссылки на переменные....70
5.9. Клонирование объектов....71
Задания....72
Глава 6. Константы....74
6.1. Объявление константы. Функция defineQ....74
6.2. Проверка существования константы....76
6.3. Динамическое имя константы....77
6.4. Предопределенные константы....78
6.5. Абсолютный и относительный пути к файлу....79
6.6. Константа класса....80
Задания....81
Глава 7. Операторы....82
7.1. Объединение строк. Оператор "точка"....82
7.2. Конструкция echo. Оператор "запятая"....83
7.3. Арифметические операторы....84
7.4. Поразрядные операторы....88
7.5. Операторы сравнения....93
7.6. Приоритет выполнения операторов....96
Задания....97
Глава 8. Условия....98
8.1. Условный оператор if....98
8.2. Логические операторы....100
8.3. Условный оператор* ?у : z....105
8.4. Оператор ??....106
8.5. Переключатель switch....106
8.6. Оператор goto....110
Задания....111
Глава 9. Циклы....112
9.1. Цикл while....112
9.2. Цикл do while....117
9.3. Цикл for....118
Задания....122
Глава 10. Массивы....124
10.1. Создание массива....124
10.2. Ассоциативные и индексные массивы....128
10.3. Многомерные массивы....129
10.4. Интерполяция элементов массива в строки....131
10.5. Конструкция listQ....132
10.6. Обход массива....133
10.7. Цикл foreach....133
10.8. Слияние массивов....135
10.9. Сравнение массивов....137
10.10. Проверка существования элементов массива....139
10.11. Удаление элементов массива....142
Задания....143
Глава 11. Функции....144
11.1. Объявление и вызов функции....144
11.2. Параметры и аргументы функции....147
11.3. Типы параметров и возвращаемого значения....148
11.4. Передача параметров по значению и ссылке....148
11.5. Необязательные параметры....149
11.6. Переменное количество параметров....150
11.7. Глобальные переменные....151
11.8. Статические переменные....152
11.9. Возврат массива функцией....153
11.10. Рекурсивные функции....153
11.11. Вложенные функции....155
11.12. Динамическое имя функции....155
11.13. Анонимные функции....156
11.14. Замыкания....158
Задания....159
Глава 12. Строковые функции....160
12.1. Строки как массивы....160
12.2. UTF-8. Расширение mbstring....161
12.3. Функции для работы с символами....163
12.4. Поиск в строке....164
12.5. Замена в тексте....165
12.6. Работа с HTML-кодом....167
12.7. Форматный вывод....171
12.8. Объединение и разбиение строк....174
12.9. Сериализация объектов и массивов....176
12.10. JSON-формат....176
Задания....180
Глава 13. Взаимодействие РНР с HTML....182
13.1. Передача параметров методом GET....182
13.2. HTML-форма и ее обработчик....185
13.3. Текстовое поле....189
13.4. Поле для приема пароля....190
13.5. Текстовая область....191
13.6. Скрытое поле....192
13.7. Флажок....194
13.8. Список....196
13.9. Переключатель....198
13.10. Загрузка файла на сервер....199
13.11. Переадресация....202
Задания....205
Глава 14. Суперглобальные массивы....206
14.1. Типы суперглобальных массивов....206
14.2. Cookie....207
14.3. Сессии....209
14.4. Переменные окружения....211
14.5. Массив $_SERVER....213
14.5.1. Элемент $_SERVER['DOCUMENT_ROOT]....213
14.5.2. Элемент $_SERVER[,HTTP_ACCEPT]....213
14.5.3. Элемент $_SERVER[fHTTP_ACCEPT_LANGUAGE]....214
14.5.4. Элемент $_SERVER[fHTTP_HOST]....215
14.5.5. Элемент $ SERVER?HTTP_REFERER]....215
14.5.6. Элемент $_SERVER['HTTP USER AGENT]....215
14.5.7. Элемент $_SERVER['REMOTE_ADDR']....215
14.5.8. Элемент $_SERVER['SCR1PT FILENAME’]....216
14.5.9. Элемент $_SERVER['SERVER NAME]....216
14.5.10. Элемент $_SERVER['REQUEST METHOD]....217
14.5.11. Элемент $_SERVER['QUERY STRING]....217
14.5.12. Элемент $_SERVER[PHP_SELF]....218
14.5.13. Элемент $_SERVERl'REQUEST URI]....218
Задания....218
Глава 15. Фильтрация и проверка данных....220
15.1. Фильтрация или проверка?....220
15.2. Фильтры проверки....222
15.3. Фильтры очистки....225
15.4. Пользовательская фильтрация данных....228
15.5. Фильтрация внешних данных....229
Задания....231
Глава 16. Методы....232
16.1. Определение метода....232
16.2. Обращение к переменным объекта....233
16.3. Статические методы....235
16.4. Ключевое слово self....235
Задания....236
Глава 17. Специальные методы....238
17.1. Конструктор_constructO....238
17.2. Параметры конструктора....240
17.3. Деструктор_destructQ....242
17.4. Методы-аксессоры_set0 и_getQ....243
17.5. Динамические методы....245
17.6. Интерполяция объекта....247
Задания....249
Глава 18. Наследование....250
18.1. Наследование....250
18.2. Спецификаторы доступа и наследование....251
18.3. Перегрузка методов....254
18.4. Позднее статическое связывание....256
18.5. Полиморфизм....258
18.6. Абстрактные классы....260
18.7. Абстрактные методы....261
18.8. /г/иа/-методы класса....262
18.9. Final-классы....263
18.10. Анонимные классы....263
18.11. Оператор instanceof....265
Задания....265
Глава 19. Интерфейсы....266
19.1. Ограничения наследования....266
19.2. Создание интерфейса....270
19.3. Наследование интерфейсов....272
19.4. Реализация нескольких интерфейсов....275
19.5. Реализует ли объект интерфейс?....277
Задание....278
Глава 20. Трейты....280
20.1. Создание трейта....280
20.2. Трейты и наследование....283
20.3. Разрешение конфликтов....286
20.4. Вложенные трейты....288
Задание....289
Глава 21. Исключения....290
21.1. Синтаксис исключений....291
21.2. Интерфейс класса Exception....292
21.3. Генерация исключений в классах....294
21.4. Создание собственных исключений....297
21.5. Перехват исключений производных классов....300
21.6. Повторная генерация исключений....301
21.7. Блок finally....303
Задание....304
Глава 22. Ошибки....306
22.1. Ошибки и исключения....306
22.2. Типы уведомлений....308
22.3. Пользовательские ошибки....310
22.4. Подавление ошибок....311
Задания....312
Глава 23. Пространство имен....314
23.1. Создание пространства имен....314
23.2. Иерархия пространств имен....319
23.3. Глобальное пространство имен....320
23.4. Текущее пространство имен....320
23.5. Импортирование....321
Задания....322
Глава 24. Автозагрузка....324
24.1. Функция__autoloadQ....324
24.2. Функция spl autoload registerQ....327
Задание....328
Глава 25. Шаблоны проектирования....330
25.1. Зачем нужны шаблоны проектирования?....331
25.2. Одиночка (Singleton)....332
25.3. Фабричный метод (Factory Method)....333
25.4. Модель-Представление-Контроллер....339
Задания....350
Глава 26. Компоненты....352
26.1. Composer: управление компонентами....352
26.2. Установка Composer....353
26.2.1. Установка в Windows....353
26.2.2. Установка в Mac OS X....355
26.2.3. Установка в Ubimtu....355
26.3. Где искать компоненты?....355
26.4. Установка компонента....356
26.5. Использование компонента....358
Задания....359
Глава 27. База данных PostgreSQL....360
27.1. Почему PostgreSQL?....361
27.2. Установка PostgreSQL....362
27.2.1. Установка в Windows....362
27.2.2. Установка в Mac OS X....364
27.2.3. Установка в Ubuntu....364
27.3. Введение в СУБД и SQL....365
27.4. Первичные ключи....367
27.5. Управление базами данных....369
27.6. Управление таблицами ;....371
27.7. Вставка записей в таблицу....372
27.8. Удаление записей....373
27.9. Обновление записей....374
27.10. Выборка записей....375
Задания....376
Глава 28. РНР-расширение PDO....378
28.1. Настройка расширения PDO....378
28.2. Установка соединения с базой данных....379
28.3. Выполнение SQL-запросов....380
28.4. Обработка ошибок....381
28.5. Извлечение данных....383
28.6. Параметризация SQL-запросов....385
Задания....386
Глава 29. NoSQL база данных Redis....388
29.1. Почему Redis?....389
29.2. Установка сервера....390
29.2.1. Установка в среде Ubuntu....390
29.2.2. Установка в среде Mac OS X....390
29.2.3. Установка в Windows....391
29.2.4. Проверка работоспособности....391
29.3. Клиент redis-cli....392
29.4. Вставка и получение значений....393
29.5. Обновление и удаление значений....394
29.6. Управление ключами....396
29.7. Время жизни ключа....396
29.8. Типы данных....397
29.9. Хэш....398
29.10. Множество....399
29.11. Отсортированное множество....401
29.12. Базы данных....403
29.13. Производительность Redis....403
Задания....404
Глава 30. РНР-расширение Redis....406
30.1. Установка расширения php-redis....406
30.2. Хранение сессий в Redis....407
30.3. Методы для обслуживания данных в Redis....408
30.4. Кэширование данных....410
Задания....415
Глава 31. Итераторы....416
31.1. Интерфейсы для создания итераторов....416
31.2. Интерфейс Array Access....420
31.3. Класс ArrayObject....423
31.4. Класс Directorylterator....424
31.5. Класс Filter Iterator....425
31.6. Класс Limitlterator....426
31.7. Рекурсивные итераторы....427
Задания....427
Глава 32. Генераторы и итераторы....428
32.1. Отложенные вычисления....428
32.2. Манипуляция массивами....431
32.3. Экономия ресурсов....433
32.4. Использование ключей....434
32.5. Связь генераторов с объектами....436
Задания....437
Заключение....438
Предметный указатель....440
Книга опытных разработчиков описывает последнюю версию языка разработки серверных сценариев PHP 7. Рассмотрены все нововведения языка и связанные с ними изменения в разработке современных Web-сайтов. Изложение ведется с упором на объектно-ориентированное программирование, шаблоны проектирования, итераторы, генераторы, а также взаимодействие с современными базами данных (PostgreSQL и Redis). В конце глав приведены более 100 заданий для закрепления материала и освоения не вошедших в книгу разделов языка. Электронный архив с исходными кодами доступен на сайтах издательства и GitHub….