Предисловие 11
Объектно-ориентированный подход 11
PostgreSQL и Redis 11
Задания 12
Исходные коды 12
Благодарности 13
Глава 1. Что представляет собой PHP? 15
1.1. Достоинства и недостатки 15
1.2. Структура PHP 17
1.3. Сопутствующие технологии 17
Задание 18
Глава 2. Установка PHP 19
2.1. Установка в Windows 19
2.2. Установка в Mac OS X 21
2.3. Установка в Linux (Ubuntu) 22
2.4. Встроенный сервер 22
2.5. Файл hosts 23
2.6. Вещание вовне 24
2.7. Настройка PHP 24
2.8. Расширения 26
2.9. Документация 27
Задания 27
Глава 3. Быстрый старт
29
3.1. Скрипты 29
3.2. Начальные и конечные теги 31
3.3. Использование точки с запятой 32
3.4. Составные выражения. Фигурные скобки 33
3.5. Комментарии 34
3.6. Включение PHP-файла 36
Задания 37
Глава 4. Переменные и типы данных 39
4.1. Объявление переменной. Оператор = 39
4.2. Типы данных 40
4.3. Целые числа 41
4.4. Вещественные числа 42
4.5. Логический тип 43
4.6. Строки 44
4.7. Кавычки 44
4.8. Оператор <<< 47
4.9. Обращение к неинициализированной переменной. Замечания (Notice) 48
4.10. Специальный тип null 48
4.11. Уничтожение переменной. Конструкция unset() 49
4.12. Проверка существования переменной. Конструкции isset() и empty() 50
4.13. Определение типа переменной 52
4.14. Неявное приведение типов 54
4.15. Явное приведение типов 55
4.16. Динамические переменные 58
Задания 59
Глава 5. Классы и объекты 61
5.1. Собственные типы данных 61
5.2. Создание класса 62
5.3. Разделение классов и остального кода 63
5.4. Создание объекта 65
5.5. Область видимости переменных класса 66
5.6. Спецификаторы доступа 67
5.7. Статические переменные класса 68
5.8. Ссылки на переменные 69
5.9. Клонирование объектов 70
Задания 71
Глава 6. Константы 73
6.1. Объявление константы. Функция define() 73
6.2. Проверка существования константы 75
6.3. Динамическое имя константы 76
6.4. Предопределенные константы 77
6.5. Абсолютный и относительный пути к файлу 78
6.6. Константы класса 79
Задания 80
Глава 7. Операторы 81
7.1. Объединение строк. Оператор "точка" 81
7.2. Конструкция echo. Оператор "запятая" 82
7.3. Арифметические операторы 83
7.4. Поразрядные операторы 87
7.5. Операторы сравнения 92
7.6. Приоритет выполнения операторов 95
Задания 96
Глава 8. Условия 97
8.1. Условный оператор if 97
8.2. Логические операторы 99
8.3. Условный оператор x ? y : z 104
8.4. Оператор ?? 105
8.5. Переключатель switch 105
8.6. Оператор goto 109
Задания 110
Глава 9. Циклы 111
9.1. Цикл while 111
9.2. Цикл do ... while 116
9.3. Цикл for 117
Задания 121
Глава 10. Массивы 123
10.1. Создание массива 123
10.2. Ассоциативные и индексные массивы 127
10.3. Многомерные массивы 128
10.4. Интерполяция элементов массива в строки 130
10.5. Конструкция list() 131
10.6. Обход массива 132
10.7. Цикл foreach 132
10.8. Слияние массивов 134
10.9. Сравнение массивов 136
10.10. Проверка существования элементов массива 138
10.11. Удаление элементов массива 141
Задания 142
Глава 11. Функции 143
11.1. Объявление и вызов функции 143
11.2. Параметры и аргументы функции 146
11.3. Типы параметров и возвращаемого значения 147
11.4. Передача параметров по значению и ссылке 147
11.5. Необязательные параметры 148
11.6. Переменное количество параметров 149
11.7. Глобальные переменные 150
11.8. Статические переменные 151
11.9. Возврат массива функцией 152
11.10. Рекурсивные функции 152
11.11. Вложенные функции 154
11.12. Динамическое имя функции 154
11.13. Анонимные функции 155
11.14. Замыкания 157
Задания 158
Глава 12. Строковые функции 159
12.1. Строки как массивы 159
12.2. UTF-8. Расширение mbstring 160
12.3. Функции для работы с символами 162
12.4. Поиск в строке 163
12.5. Замена в тексте 164
12.6. Работа с HTML-кодом 166
12.7. Форматный вывод 170
12.8. Объединение и разбиение строк 173
12.9. Сериализация объектов и массивов 175
12.10. JSON-формат 175
Задания 179
Глава 13. Взаимодействие PHP с HTML 181
13.1. Передача параметров методом GET 181
13.2. HTML-форма и ее обработчик 184
13.3. Текстовое поле 188
13.4. Поле для приема пароля 189
13.5. Текстовая область 190
13.6. Скрытое поле 191
13.7. Флажок 193
13.8. Список 195
13.9. Переключатель 197
13.10. Загрузка файла на сервер 198
13.11. Переадресация 201
Задания 204
Глава 14. Суперглобальные массивы 205
14.1. Типы суперглобальных массивов 205
14.2. Cookie 206
14.3. Сессии 208
14.4. Переменные окружения 210
14.5. Массив $_SERVER 212
14.5.1. Элемент $_SERVER['DOCUMENT_ROOT'] 212
14.5.2. Элемент $_SERVER['HTTP_ACCEPT'] 212
14.5.3. Элемент $_SERVER['HTTP_ACCEPT_LANGUAGE'] 213
14.5.4. Элемент $_SERVER['HTTP_HOST'] 214
14.5.5. Элемент $_SERVER['HTTP_REFERER'] 214
14.5.6. Элемент $_SERVER['HTTP_USER_AGENT'] 214
14.5.7. Элемент $_SERVER['REMOTE_ADDR'] 214
14.5.8. Элемент $_SERVER['SCRIPT_FILENAME'] 215
14.5.9. Элемент $_SERVER['SERVER_NAME'] 215
14.5.10. Элемент $_SERVER['REQUEST_METHOD'] 216
14.5.11. Элемент $_SERVER['QUERY_STRING'] 216
14.5.12. Элемент $_SERVER['PHP_SELF'] 217
14.5.13. Элемент $_SERVER['REQUEST_URI'] 217
Задания 217
Глава 15. Фильтрация и проверка данных 219
15.1. Фильтрация или проверка? 219
15.2. Фильтры проверки 221
15.3. Фильтры очистки 224
15.4. Пользовательская фильтрация данных 227
15.5. Фильтрация внешних данных 228
Задания 230
Глава 16. Методы 231
16.1. Определение метода 231
16.2. Обращение к переменным объекта 232
16.3. Статические методы 234
16.4. Ключевое слово self 234
Задания 235
Глава 17. Специальные методы 237
17.1. Конструктор __construct() 237
17.2. Параметры конструктора 239
17.3. Деструктор __destruct() 241
17.4. Методы-аксессоры __set() и __get() 242
17.5. Динамические методы 244
17.6. Интерполяция объекта 246
Задания 248
Глава 18. Наследование
249
18.1. Наследование 249
18.2. Спецификаторы доступа и наследование 250
18.3. Перегрузка методов 253
18.4. Позднее статическое связывание 255
18.5. Полиморфизм 257
18.6. Абстрактные классы 259
18.7. Абстрактные методы 260
18.8. Final-методы класса 261
18.9. Final-классы 262
18.10. Анонимные классы 262
18.11. Оператор instanceof 264
Задания 264
Глава 19. Интерфейсы
265
19.1. Ограничения наследования 265
19.2. Создание интерфейса 269
19.3. Наследование интерфейсов 271
19.4. Реализация нескольких интерфейсов 274
19.5. Реализует ли объект интерфейс? 276
Задание 277
Глава 20. Трейты
279
20.1. Создание трейта 279
20.2. Трейты и наследование 282
20.3. Разрешение конфликтов 285
20.4. Вложенные трейты 287
Задание 288
Глава 21. Исключения
289
21.1. Синтаксис исключений 290
21.2. Интерфейс класса Exception 291
21.3. Генерация исключений в классах 293
21.4. Создание собственных исключений 296
21.5. Перехват исключений производных классов 299
21.6. Повторная генерация исключений 300
21.7. Блок finally 302
Задание 303
Глава 22. Ошибки
305
22.1. Ошибки и исключения 305
22.2. Типы уведомлений 307
22.3. Пользовательские ошибки 309
22.4. Подавление ошибок 310
Задания 311
Глава 23. Пространство имен
313
23.1. Создание пространства имен 313
23.2. Иерархия пространств имен 318
23.3. Глобальное пространство имен 319
23.4. Текущее пространство имен 319
23.5. Импортирование 320
Задания 321
Глава 24. Автозагрузка
323
24.1. Функция __autoload() 323
24.2. Функция spl_autoload_register() 326
Задание 327
Глава 25. Шаблоны проектирования
329
25.1. Зачем нужны шаблоны проектирования? 330
25.2. Одиночка (Singleton) 331
25.3. Фабричный метод (Factory Method) 332
25.4. Модель-Представление-Контроллер 338
Задания 349
Глава 26. Компоненты
351
26.1. Composer: управление компонентами 351
26.2. Установка Composer 352
26.2.1. Установка в Windows 352
26.2.2. Установка в Mac OS X 354
26.2.3. Установка в Ubuntu 354
26.3. Где искать компоненты? 354
26.4. Установка компонента 355
26.5. Использование компонента 357
Задания 358
Глава 27. База данных PostgreSQL
359
27.1. Почему PostgreSQL? 360
27.2. Установка PostgreSQL 361
27.2.1. Установка в Windows 361
27.2.2. Установка в Mac OS X 363
27.2.3. Установка в Ubuntu 363
27.3. Введение в СУБД и SQL 364
27.4. Первичные ключи 366
27.5. Управление базами данных 368
27.6. Управление таблицами 370
27.7. Вставка записей в таблицу 371
27.8. Удаление записей 372
27.9. Обновление записей 373
27.10. Выборка записей 374
Задания 375
Глава 28. PHP-расширение PDO 377
28.1. Настройка расширения PDO 377
28.2. Установка соединения с базой данных 378
28.3. Выполнение SQL-запросов 379
28.4. Обработка ошибок 380
28.5. Извлечение данных 382
28.6. Параметризация SQL-запросов 384
Задания 385
Глава 29. NoSQL база данных Redis 387
29.1. Почему Redis? 388
29.2. Установка сервера 389
29.2.1. Установка в среде Ubuntu 389
29.2.2. Установка в среде Mac OS X 389
29.2.3. Установка в Windows 390
29.2.4. Проверка работоспособности 390
29.3. Клиент redis-cli 391
29.4. Вставка и получение значений 392
29.5. Обновление и удаление значений 393
29.6. Управление ключами 395
29.7. Время жизни ключа 395
29.8. Типы данных 396
29.9. Хэш 397
29.10. Множество 398
29.11. Отсортированное множество 400
29.12. Базы данных 402
29.13. Производительность Redis 402
Задания 403
Глава 30. PHP-расширение Redis 405
30.1. Установка расширения php-redis 405
30.2. Хранение сессий в Redis 406
30.3. Методы для обслуживания данных в Redis 407
30.4. Кэширование данных 409
Задания 414
Глава 31. Итераторы 415
31.1. Интерфейсы для создания итераторов 415
31.2. Интерфейс ArrayAccess 419
31.3. Класс ArrayObject 422
31.4. Класс DirectoryIterator 423
31.5. Класс FilterIterator 424
31.6. Класс LimitIterator 425
31.7. Рекурсивные итераторы 426
Задания 426
Глава 32. Генераторы и итераторы 427
32.1. Отложенные вычисления 427
32.2. Манипуляция массивами 430
32.3. Экономия ресурсов 432
32.4. Использование ключей 433
32.5. Связь генераторов c объектами 435
Задания 436

Заключение 437
Предметный указатель 439