УДК 004.738.5:004.438РНР
ББК 32.973.4
Л73
Л73
Локхарт, Джош.
Современный PHP. Новые возможности и передовой опыт / Дж. Локхарт
; пер. с англ. Р. Н. Рагимова. — 2-е изд., эл. — 1 файл pdf : 305 с. — Москва
: ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe
Digital Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-349-3
Из книги вы узнаете, как PHP превратился в зрелый полнофункциональный
объектно-ориентированный язык, с пространствами имен и постоянно растущей
коллекцией библиотек компонентов. Автор демонстрирует новые возможности языка
на практике. Вы узнаете о передовых методах проектирования и конструирования
приложений, работы с базами данных, обеспечения безопасности, тестирования,
отладки и развертывания.
Если вы уже знакомы с языком PHP и желаете расширить свои знания о нем, то
эта книга для вас!
УДК 004.738.5:004.438РНР
ББК 32.973.4
Электронное издание на основе печатного издания: Современный PHP. Новые возможности
и передовой опыт / Дж. Локхарт ; пер. с англ. Р. Н. Рагимова. — Москва : ДМК Пресс, 2016. —
304 с. — ISBN 978-5-97060-184-6. — Текст : непосредственный.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было
форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических
ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность
приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные
с использованием книги.
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN
978-5-89818-349-3
© 2015 Josh Lockhart
© Оформление, перевод на русский язык,
ДМК Пресс, 2016
Стр.5
Оглавление
Об авторе ........................................................ 13
Предисловие ................................................... 14
Что нужно знать об этой книге ............................................................... 14
Структура книги .................................................................................... 15
Соглашения, принятые в этой книге ...................................................... 16
Использование примеров кода ............................................................. 16
Как связаться с нами ............................................................................. 17
Благодарности ...................................................................................... 17
ЧАСТЬ I.
Особенности языка ........................................... 19
Глава 1. Новый PHP ........................................... 20
Прошлое ....................................................................................... 20
Настоящее .................................................................................... 21
Будущее ........................................................................................ 23
Глава 2. Особенности ........................................ 25
Пространства имен ....................................................................... 25
Зачем нужны пространства имен .......................................................... 28
Объявление .......................................................................................... 28
Импорт и псевдонимы .......................................................................... 30
Полезные советы .................................................................................. 32
Интерфейсы .................................................................................. 34
Трейты .......................................................................................... 39
Зачем нужны трейты ............................................................................. 39
Как создать трейт ................................................................................. 41
Как использовать трейт ......................................................................... 43
Генераторы ................................................................................... 44
Создание генератора ............................................................................ 45
Использование генератора ................................................................... 46
Замыкания .................................................................................... 48
Создание .............................................................................................. 49
Прикрепление состояния ...................................................................... 50
Расширение Zend OPcache ........................................................... 53
Стр.7
Оглавление
7
Включение расширения Zend OPcache ................................................. 54
Настройка расширения Zend OPcache .................................................. 55
Использование расширения Zend OPcache ........................................... 56
Встроенный HTTP-сервер ............................................................. 56
Запуск сервера ..................................................................................... 57
Настройка сервера ............................................................................... 57
Сценарии маршрутизации .................................................................... 58
Обнаружение встроенного сервера ...................................................... 58
Недостатки ........................................................................................... 59
Что дальше .................................................................................... 59
ЧАСТЬ II.
Передовые технологии ...................................... 61
Глава 3. Стандарты ........................................... 62
PHP-FIG приходит на помощь ........................................................ 63
Совместимость фреймворков ....................................................... 64
Интерфейсы ......................................................................................... 64
Автозагрузка ......................................................................................... 64
Стиль .................................................................................................... 65
Что такое PSR? .............................................................................. 65
PSR-1: Базовый стиль оформления кода ....................................... 66
PSR-2: Строгий стиль оформления кода ........................................ 68
PSR-3: Интерфейс журналирования .............................................. 73
Создание компонента журналирования PSR-3 ...................................... 73
Использование компонента журналирования PSR-3 ............................. 74
PSR-4: Автозагрузка ...................................................................... 75
Почему автозагрузка так важна ............................................................. 76
Модель автозагрузки PSR-4 .................................................................. 77
Как написать автозагрузчик PSR-4 (и почему этого делать не нужно) .... 78
Глава 4. Компоненты ......................................... 80
Почему надо использовать компоненты?....................................... 80
Что представляют собой компоненты? .......................................... 81
Компоненты и фреймворки ........................................................... 83
Не все фреймворки плохи ..................................................................... 84
Использование инструмента, соответствующего задаче ...................... 85
Поиск компонентов ....................................................................... 85
Магазин ................................................................................................ 86
Выбор ................................................................................................... 87
Оставьте отзыв ..................................................................................... 88
Использование PHP-компонентов ................................................. 88
Установка Composer ............................................................................. 89
Стр.8
8
Оглавление
Как использовать Composer .................................................................. 90
Пример проекта .................................................................................... 92
Composer и закрытые хранилища ......................................................... 96
Создание PHP-компонентов .......................................................... 98
Имена производителя и пакета ............................................................. 98
Пространства имен ............................................................................... 99
Организация файловой системы .......................................................... 99
Файл composer.json............................................................................. 100
Файл README ..................................................................................... 103
Реализация компонента ...................................................................... 103
Управление версиями ......................................................................... 106
Размещение на сайте Packagist .......................................................... 106
Использование компонента ................................................................ 107
Глава 5. Передовой опыт .................................. 109
Санирование и проверка ввода, и экранирование вывода ........... 110
Санирование ввода ............................................................................. 110
Проверка данных ................................................................................ 114
Экранирование вывода ....................................................................... 115
Пароли ........................................................................................ 116
Не храните пароли в открытом виде .................................................... 116
Не ограничивайте пароли ваших пользователей ................................. 116
Не отправляйте пароли пользователей по электронной почте ............. 117
Хеширование паролей пользователей с помощью bcrypt .................... 117
Программный интерфейс хеширования паролей ................................ 119
Программный интерфейс хеширования паролей для PHP < 5.5.0........ 124
Даты, время и часовые пояса ...................................................... 125
Установка часового пояса по умолчанию ............................................ 125
Класс DateTime .................................................................................. 125
Класс DateInterval ................................................................................ 127
Класс DateTimeZone ............................................................................ 128
Класс DatePeriod ................................................................................. 129
Компонент nesbot/carbont .................................................................. 130
Базы данных ................................................................................ 131
Расширение PDO ................................................................................ 131
Подключение базы данных и DSN........................................................ 131
Параметризованные запросы ............................................................. 134
Результаты запроса ............................................................................ 137
Транзакции ......................................................................................... 139
Многобайтовые строки ............................................................... 143
Кодировка символов ........................................................................... 144
Отображение данных в кодировке UTF-8 ............................................. 145
Потоки данных ............................................................................ 145
Обертки потоков ................................................................................. 146
Контекст потока .................................................................................. 150
Фильтры потоков ................................................................................ 150
Стр.9
Оглавление
9
Пользовательские фильтры потоков ................................................... 153
Ошибки и исключения ................................................................. 156
Исключения ........................................................................................ 157
Обработчики исключений ................................................................... 161
Ошибки ............................................................................................... 162
Обработчики ошибок .......................................................................... 164
Ошибки и исключения в ходе разработки ............................................ 166
Эксплуатация ...................................................................................... 168
ЧАСТЬ III.
Развертывание, тестирование и настройка ......... 171
Глава 6. Хостинг ............................................. 172
Разделяемые серверы ................................................................ 172
Виртуальный выделенный сервер ............................................... 173
Выделенный сервер .................................................................... 174
PaaS ............................................................................................ 175
Выбор тарифного плана хостинга ................................................ 176
Глава 7. Комплектование ................................. 177
Наша цель ................................................................................... 178
Настройка сервера ...................................................................... 178
Первый вход ....................................................................................... 178
Обновление программного обеспечения ............................................ 179
Непривилегированный пользователь .................................................. 180
SSH-аутентификация с помощью парных ключей ............................... 181
Отключение парольной аутентификации и запрет входа
пользователя root ............................................................................... 183
PHP-FPM ..................................................................................... 184
Установка ........................................................................................... 184
Глобальная конфигурация ................................................................... 185
Настройка пулов ................................................................................. 186
nginx ............................................................................................ 189
Установка ........................................................................................... 190
Виртуальный хост ............................................................................... 190
Автоматизация комплектования .................................................. 193
Делегирование комплектования ................................................. 194
Дополнительные материалы ....................................................... 194
Что дальше .................................................................................. 195
Глава 8. Настройка .......................................... 196
Файл php.ini ................................................................................ 196
Память ........................................................................................ 197
Стр.10
10
Оглавление
Zend OPcache .............................................................................. 198
Выгрузка файлов ......................................................................... 201
Максимальное время выполнения ............................................... 202
Обслуживание сеансов ............................................................... 203
Буферизация вывода .................................................................. 204
Кэш Realpath ............................................................................... 204
Что дальше .................................................................................. 205
Глава 9. Развертывание ................................... 206
Управление версиями ................................................................. 206
Автоматизация развертывания ................................................... 207
Сделайте развертывание простым ..................................................... 207
Сделайте развертывание предсказуемым .......................................... 207
Сделайте развертывание обратимым ................................................. 207
Capistrano.................................................................................... 207
Как это работает ................................................................................. 208
Установка ........................................................................................... 208
Настройка ........................................................................................... 209
Аутентификация .................................................................................. 211
Подготовка удаленного сервера ......................................................... 211
Обработчики Capistrano ...................................................................... 212
Развертывание приложения ................................................................ 213
Откат к предыдущей версии приложения ............................................ 213
Дополнительные материалы ............................................................... 213
Что дальше .................................................................................. 213
Глава 10. Тестирование ................................... 214
Почему мы тестируем? ................................................................ 214
Когда мы тестируем? ................................................................... 215
Перед ................................................................................................. 215
В процессе ......................................................................................... 215
После .................................................................................................. 216
Что мы тестируем? ...................................................................... 216
Как мы тестируем? ...................................................................... 216
Модульное тестирование .................................................................... 216
Разработка через тестирование (TDD) ................................................ 217
Разработка, основанная на функционировании (BDD) ........................ 217
PHPUnit ....................................................................................... 219
Структура каталогов ........................................................................... 219
Установка PHPUnit .............................................................................. 220
Установка Xdebug ............................................................................... 221
Настройка PHPUnit .............................................................................. 222
Класс Whovian ..................................................................................... 223
Класс теста WhovianTest ...................................................................... 224
Стр.11
Оглавление
11
Запуск тестов ..................................................................................... 227
Охват кода .......................................................................................... 228
Непрерывное тестирование с помощью Travis CI ......................... 229
Установка ........................................................................................... 229
Запуск ................................................................................................ 230
Дополнительные материалы ....................................................... 231
Что дальше .................................................................................. 231
Глава 11. Профилирование .............................. 232
Когда следует использовать профилировщик.............................. 232
Типы профилировщиков .............................................................. 233
Xdebug ........................................................................................ 233
Настройка ........................................................................................... 234
Включение .......................................................................................... 235
Анализ ................................................................................................ 235
XHProf ......................................................................................... 235
Установка ........................................................................................... 236
XHGUI .................................................................................................. 236
Настройка ........................................................................................... 237
Включение .......................................................................................... 237
Профилировщик New Relic .......................................................... 238
Профилировщик Blackfire ............................................................ 238
Дополнительные материалы ....................................................... 238
Что дальше .................................................................................. 239
Глава 12. HHVM и Hack ..................................... 240
HHVM .......................................................................................... 240
PHP в Facebook ................................................................................... 241
Совместимость HHVM с Zend Engine ................................................... 243
Будет ли HHVM правильным выбором для меня? ................................ 243
Установка ........................................................................................... 244
Настройка ........................................................................................... 245
Расширения ........................................................................................ 246
Мониторинг HHVM с помощью Supervisord .......................................... 246
HHVM, FastCGI и Nginx ........................................................................ 248
Язык Hack.................................................................................... 250
Перевод с PHP на Hack ....................................................................... 250
Что такое типы? .................................................................................. 251
Статическая типизация ....................................................................... 252
Динамическая типизация .................................................................... 253
Двойной подход языка Hack ................................................................ 254
Контроль типов в Hack ........................................................................ 254
Режимы Hack ..................................................................................... 255
Синтаксис Hack .................................................................................. 256
Стр.12
12
Оглавление
Структуры данных Hack ....................................................................... 258
HHVM и Hack против PHP .................................................................... 259
Дополнительные материалы ....................................................... 261
Глава 13. Сообщество ..................................... 262
Местная группа PHP-разработчиков ........................................... 262
Конференции .............................................................................. 262
Наставничество ........................................................................... 263
Будьте в курсе ............................................................................. 263
Сайты ................................................................................................. 263
Списки рассылок ................................................................................ 263
Твиттер ............................................................................................... 263
Подкасты ............................................................................................ 263
Юмор .................................................................................................. 264
Приложение А. Установка PHP .......................... 265
Linux ............................................................................................ 265
Менеджеры пакетов ............................................................................ 265
Ubuntu 14.04 LTS ................................................................................. 266
CentOS 7 ............................................................................................. 268
MAMP ................................................................................................. 270
Homebrew ........................................................................................... 273
Сборка из исходных текстов ........................................................ 277
Получение исходного кода .................................................................. 278
Windows....................................................................................... 284
Скомпилированные файлы ................................................................. 285
WAMP .................................................................................................. 285
Zend Server ......................................................................................... 286
Приложение Б. Локальная среда разработки ....... 287
VirtualBox ..................................................................................... 288
Vagrant ........................................................................................ 289
Команды ............................................................................................. 289
Боксы ................................................................................................. 290
Инициализация ................................................................................... 290
Комплектование ................................................................................. 291
Синхронизация каталогов ................................................................... 292
Быстрый старт .................................................................................... 293
Предметный указатель .................................... 295
Об обложке.................................................... 303
Стр.13