Современный PHP. Новые возможности и передовой опыт
Покупка
Тематика:
Web-технологии. Web-дизайн
Издательство:
ДМК Пресс
Автор:
Локхарт Джош
Перевод:
Рагимов Р. Н.
Год издания: 2016
Кол-во страниц: 304
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-184-6
Артикул: 712463.01.99
Доступ онлайн
В корзину
Из книги вы узнаете, как РНР превратился в зрелый полнофункциональный объектно-ориентированный язык, с пространствами имен и постоянно растущей коллекцией библиотек компонентов. Автор демонстрирует новые возможности языка на практике. Вы узнаете о передовых методах проектирования и конструирования приложений, работы с базами данных, обеспечения безопасности, тестирования, отладки и развертывания. Если вы уже знакомы с языком РНР и желаете расширить свои знания о нем, то эта книга для вас!
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Джош Локхарт Современный 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). О’Рейли предложил мне написать книгу.
Доступ онлайн
В корзину