Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Современный PHP. Новые возможности и передовой опыт

Покупка
Артикул: 712463.01.99
Доступ онлайн
649 ₽
В корзину
Из книги вы узнаете, как РНР превратился в зрелый полнофункциональный объектно-ориентированный язык, с пространствами имен и постоянно растущей коллекцией библиотек компонентов. Автор демонстрирует новые возможности языка на практике. Вы узнаете о передовых методах проектирования и конструирования приложений, работы с базами данных, обеспечения безопасности, тестирования, отладки и развертывания. Если вы уже знакомы с языком РНР и желаете расширить свои знания о нем, то эта книга для вас!
Локхарт, Д. Современный РНР. Новые возможности и передовой опыт / Джош Локхарт ; пер. с англ. Р.Н. Рагимова. - Москва : ДМК Пресс, 2016. - 304 с. - ISBN 978-5-97060-184-6. - Текст : электронный. - URL: https://znanium.com/catalog/product/1028044 (дата обращения: 26.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Джош Локхарт

Современный PHP

Новые возможности и передовой опыт

Modern PHP

Josh Lockhart

Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo

New Features and Good Practices

Москва, 2016

Современный PHP

Джош Локхарт

Новые возможности и передовой опыт

УДК   004.738.5:004.438РНР
ББК    32.973.4

Л73

Л73     Джош Локхарт

Современный PHP. Новые возможности и передовой опыт / пер. с 
англ. Рагимов Р. Н – М.: ДМК Пресс, 2016. – 304 с.: ил.

             ISBN 978-5-97060-184-6

Из книги вы узнаете, как PHP превратился в зрелый полнофункци
ональный объектно-ориентированный язык, с пространствами имен 
и постоянно растущей коллекцией библиотек компонентов. Автор 
демонстрирует новые возможности языка на практике. Вы узнаете о 
передовых методах проектирования и конструирования приложений, 
работы с базами данных, обеспечения безопасности, тестирования, отладки и развертывания. 

Если вы уже знакомы с языком PHP и желаете расширить свои зна
ния о нем, то эта книга для вас!

УДК   004.738.5:004.438РНР

     ББК    32.973.4

Original English language edition published by O’Reilly Media, Inc., 1005 

Gravenstein Highway North, Sebastopol, CA 95472. Copyright © 2015 O’Reilly 
Media, Inc. Russian-language edition copyright © 2015 by DMK Press. All rights 
reserved.

Все права защищены. Любая часть этой книги не может быть воспроиз
ведена в какой бы то ни было форме и какими бы то ни было средствами без 
письменного разрешения владельцев авторских прав.

Материал, изложенный в данной книге, многократно проверен. Но, по
скольку вероятность технических ошибок все равно существует, издательство 
не может гарантировать абсолютную точность и правильность приводимых 
сведений. В связи с этим издательство не несет ответственности за возможные 
ошибки, связанные с использованием книги.

ISBN 978-1-49190-501-2 (англ.)                     Copyright © 2015 Josh Lockhart 
ISBN 978-5-97060-184-6 (рус.)                       © Оформление, перевод на русский язык,

          ДМК Пресс, 2016

Лорел посвящается

Оглавление

Об авторе ........................................................ 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

Оглавление

Включение расширения 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

Оглавление

Как использовать 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

Оглавление

Пользовательские фильтры потоков ................................................... 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

Оглавление

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

Оглавление

Запуск тестов ..................................................................................... 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

Оглавление

Структуры данных 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

Об автОре

Джош Локхарт (Josh Lockhart) – создатель Slim Framework (http://
slimframework.com/), популярного микрофреймворка для PHP, обеспечивающего быструю разработку веб-приложений и программных 
интерфейсов. Джош также основал и до сих пор курирует «PHP The 
Right Way» (http://www.phptherightway.com/) – популярную в PHPсообществе инициативу, поощряющую современные методики разработки и распространяющую качественную информацию для PHPразработчиков по всему миру.
Джош работает программистом в New Media Campaigns (http://
www.newmediacampaigns.com/), агентстве по предоставлению полного комплекса услуг веб-дизайн, разработки и маркетинга в Каррборо, 
Северная Каролина. Получает удовольствие от создания приложений с использованием HTML, CSS, PHP, JavaScript, Bash и различных фреймворков управления контентом.
Окончил курс Information and Library Science (http://sils.unc.edu/) 
в Университете Северной Каролины, в Чапел-Хилл, в 2008. В настоящее время проживает в Чапел-Хилл, штат Северная Каролина, вместе со своей замечательной женой Лорел и двумя их собаками.
Джоша можно найти в Твиттере (https://twitter.com/codeguy). Его 
блог доступен по адресу https://joshlockhart.com, а его проекты с открытым исходным кодом – на GitHub (https://github.com/codeguy).

ПредислОвие

В Интернете можно найти миллионы электронных пособий по PHP. 
Большинство из них устарели и содержат описание отработавших 
свое технологий. Но Google продолжает выдавать ссылки на эти пособия, обеспечивая им бессмертие. Устаревшая информация не приносит пользы начинающим PHP-программистам, которые, основываясь на ней, создают медленные и ненадежные PHP-приложения. 
Я осознал эту проблему в 2013 году, и это явилось основной причиной появления инициативы «PHP The Right Way» (http://www.
phptherightway.com/) по обеспечению доступа к качественной актуальной информации от авторитетных членов PHP-сообщества.
Книга «Современный PHP» служит той же цели. Эта книга не 
справочное руководство. Нет. Эта книга представляет собой дружеский и живой разговор между нами. Я познакомлю вас с современным языком программирования PHP. Расскажу о новейших PHPтехнологиях, которыми ежедневно пользуюсь в работе и в своих 
проектах с открытым исходным кодом. И помогу вам начать использовать новейшие стандарты программирования, освоив которые, вы 
сможете распространять свои PHP-компоненты и библиотеки среди 
членов PHP-сообщества.
Я часто буду упоминать слово «сообщество», повторяя его снова 
и снова. PHP-сообщество дружелюбно, приветливо и всегда готово 
прийти на помощь, хотя, иногда встречаются досадные исключения. 
Если вам захочется узнать больше об определенной особенности, 
упомянутой в этой книге, обратитесь в местную группу пользователей PHP с возникшими вопросами. Я уверен, что вокруг вас найдутся 
PHP-разработчики, которые захотят помочь вам лучше узнать PHP. 
Ваша местная группа PHP-пользователей это бесценный источник, 
который позволит вам совершенствоваться в PHP и после завершения чтения этой книги.

Что нужно знать об этой книге
Прежде чем начать, я хочу, остановиться на том, что вы найдете в 
этой книге. Во-первых,  я не смогу описать все подходы, используемые 

Предисловие

в PHP. На это просто не хватит времени. Вместо этого, я расскажу, как 
я пользуюсь PHP. Да, это мой личный взгляд на вещи, но я использую 
те же методы и стандарты, что и многие другие PHP-разработчики. 
Все, что вы вынесете из нашей краткой беседы, вы сможете сразу же 
применить в своих проектах.
Во-вторых, я предполагаю, что вы знакомы с переменными, условными операторами, циклами и так далее. От вас не требуется знание 
языка PHP, но вы должны, по крайней мере, иметь базовое представление об этих фундаментальных понятиях программирования. Я не 
буду против, если вы захватите с собой кофе (я очень люблю кофе). 
А я принесу с собой все, что там полагается к кофе.
И в-третьих, я не настаиваю на использовании какой-либо конкретной операционной системы. Однако примеры кода написаны 
мной для Linux. Bash-команды, которые вы увидите в книге, я использую в Ubuntu и CentOS, но они также будут работать в OS X. 
Если вы пользуетесь Windows, настоятельно рекомендую установить 
и настроить виртуальную машину с Linux для опробования примеров 
кода, прилагаемых к этой книге.
Структура книги
Часть I посвящена описанию новых возможностей языка PHP, таких как пространства имен, генераторы и трейты (traits). Она познакомит вас с современным языком PHP и его особенностями, с которыми вы, возможно, до сих пор не сталкивались.
Часть II рассматривает передовые технологии, которые обязательно 
следует применять в своих PHP-приложениях. Вы слышали о PSR, но 
не совсем понимаете, что это такое и как им пользоваться? Вы хотите 
узнать, как безопасно обработать пользовательский ввод и выполнять 
защищенные запросы к базе данных? Тогда вам стоит ее прочесть.
Часть III содержит больше технических подробностей, чем первые 
две части. Она посвящена развертыванию, настройке, тестированию 
и профилированию PHP-приложений. Мы углубимся в методику 
развертывания с помощью Capistrano. Поговорим об  инструментах 
тестировании, таких как PHPUnit и Travis CI. Обсудим настройку 
PHP и ее влияние на работу вашего приложения.
Приложение А содержит пошаговые инструкции по установке и 
настройке PHP-FPM.
Приложение B описывает процедуру создания локальной среды 
разработки максимально приближенной к среде действующего сервера. Мы познакомимся с Vagrant, Puppet, Chef и альтернативными 
им инструментами для быстрого начала работы.

Предисловие

Соглашения, принятые в этой книге

В этой книге приняты следующие типографские соглашения:
Курсив
 
Используется для обозначения новых терминов, адресов электронной почты, имен файлов и расширений имен файлов .

Моноширинный
 
Применяется для оформления листингов программ и программных элементов внутри обычного текста, таких как имена 
переменных и функций, типов данных, переменных окружения, инструкций и ключевых слов .

Моноширинный жирный
 
Обозначает команды или другой текст, который должен вводиться пользователем.

Моноширинный курсив
 
Обозначает текст, который должен замещаться фактическими 
значениями, вводимыми пользователем или определяемыми 
из контекста .

Так обозначается совет или рекомендация.

Так будут выделены общие примечания.

Так будут выделены предупреждения и предостережения.

Использование примеров кода
Сопроводительные материалы (примеры кода, упражнения и т. д.) 
можно загрузить на странице https://github.com/codeguy/modern-php.
Данная книга призвана оказать вам помощь в решении ваших задач. Вы можете свободно использовать примеры программного кода 

Предисловие

из этой книги в своих приложениях и в документации. Вам не нужно 
обращаться в издательство за разрешением, если вы не собираетесь 
воспроизводить существенные части программного кода. Например, 
если вы разрабатываете программу и используете в ней несколько 
отрывков программного кода из книги, вам не нужно обращаться за 
разрешением. Однако в случае продажи или распространения компакт-дисков с примерами из этой книги вам необходимо получить 
разрешение от издательства O’Reilly. Если вы отвечаете на вопросы, 
цитируя данную книгу или примеры из нее, получение разрешения не 
требуется. Но при включении существенных объемов программного 
кода примеров из этой книги в вашу документацию необходимо получить разрешение издательства.
Мы приветствуем, но не требуем добавлять ссылку на первоисточник 
при цитировании. Под ссылкой на первоисточник мы подразумеваем 
указание авторов, издательства и ISBN. Например: «Modern PHP by Josh 
Lockhart (O’Reilly). Copyright 2015 Josh Lockhart, 978-1-491-90501-2.».
За получением разрешения на использование значительных объемов программного кода примеров из этой книги обращайтесь по 
адресу permissions@oreilly.com.

Как связаться с нами
С вопросами и предложениями, касающимися этой книги, обращайтесь в издательство:
O’Reilly Media, Inc.
1005 Gravenstein Highway North Sebastopol, CA 95472
800-998-9938 (США или Канада) 
Список опечаток, файлы с примерами и другую дополнительную 
информацию вы найдете на странице книги http://bit.ly/modern_php.
Свои пожелания и вопросы технического характера отправляйте 
по адресу bookquestions@oreilly.com.
Мы в Facebook: http://facebook.com/oreilly
Мы в Twitter: http://twitter.com/oreillymedia
Мы в YouTube: http://www.youtube.com/oreillymedia

Благодарности
Это моя первая книга. Когда О’Рейли (O’Reilly) предложил мне 
написать книгу «Современный PHP», это сильно взволновало меня и 
перепугало до смерти. Первое, что я сделал, исполнил танец Уолтера 
Хьюстона (Walter Huston). О’Рейли предложил мне написать книгу. 

Доступ онлайн
649 ₽
В корзину