Внимание!!!! Книга удалена по требованию
правообладателя!!!!
Предисловие....14
Для кого эта книга....15
Структура издания....15
Условные обозначения....16
Благодарности....17
От издательства....17
Глава 1. Переменные....18
1.1. Определение констант....20
1.2. Создание переменных переменных....22
1.3. Обмен значениями между переменными....24
Глава 2. Операторы....27
Логические операторы....27
Побитовые операторы....28
Операторы сравнения....29
Приведение типов....30
2.1. Использование тернарного оператора вместо блока if-else....31
2.2. Объединение потенциально нулевых значений....33
2.3. Сравнение одинаковых значений....35
2.4. Использование оператора spaceship для сортировки значений....37
2.5. Подавление сообщений об ошибках с помощью оператора @....40
2.6. Сравнение битов внутри целых чисел....41
Глава 3. Функции....45
3.1. Доступ к параметрам функций....47
3.2. Установка значений параметров функции по умолчанию....49
3.3. Использование именованных параметров функций....51
3.4. Обеспечение типизации аргументов и возвращаемого значения функции....53
3.5. Определение функции с переменным числом аргументов....57
3.6. Возвращение нескольких значений....59
3.7. Доступ к глобальным переменным внутри функции....61
3.8. Управление состоянием внутри функции при многократных вызовах....65
3.9. Определение динамических функций....68
3.10. Передача функций в качестве параметров другим функциям....69
3.11. Стрелочные функции....72
3.12. Создание функции без возвращаемого значения....75
3.13. Создание функции, которая не возвращается....77
Глава 4. Строки....78
4.1. Доступ к подстрокам в более крупной строке....81
4.2. Извлечение одной строки из другой....83
4.3. Замена части строки....84
4.4. Обработка строки по одному байту за раз....87
4.5. Генерация случайных строк....90
4.6. Интерполяция переменных в строке....91
4.7. Конкатенация нескольких строк вместе....93
4.8. Управление двоичными данными, хранящимися в строках....95
Глава 5. Числа....99
5.1. Проверка числа в переменной....100
5.2. Сравнение чисел с плавающей точкой....102
5.3. Округление чисел с плавающей точкой....104
5.4. Генерация случайных чисел....106
5.5. Генерация предсказуемых случайных чисел....108
5.6. Генерация взвешенных случайных чисел....110
5.7. Вычисление логарифмов....113
5.8. Вычисление экспоненты....114
5.9. Форматирование чисел как строк....115
5.10. Работа с очень большими или очень маленькими числами....116
5.11. Конвертация чисел из одной системы счисления в другую....119
Глава 6. Дата и время....121
Объектно-ориентированный подход....121
Часовые пояса....121
Временные метки Unix....122
6.1. Поиск текущей даты и времени....122
6.2. Форматирование дат и времени....124
6.3. Преобразование дат и времени во временные метки Unix....128
6.4. Преобразование временных меток Unix в составные части даты и времени....130
6.5. Вычисление разницы между двумя датами....131
6.6. Разбор дат и времени из произвольных строк....133
6.7. Проверка даты....136
6.8. Добавление к дате или вычитание из нее....137
6.9. Расчет времени в разных часовых поясах....140
Глава 7. Массивы....143
Типы массивов....143
Синтаксис....144
7.1. Объединение нескольких элементов по ключу в массиве....145
7.2. Инициализация массива с диапазоном чисел....148
7.3. Итерация элементов в массиве....149
7.4. Удаление элементов из ассоциативных и числовых массивов....152
7.5. Изменение размера массива....155
7.6. Добавление одного массива к другому....158
7.7. Создание массива из фрагмента существующего массива....161
7.8. Преобразование между массивами и строками....164
7.9. Реверсирование массива....167
7.10. Сортировка массива....168
7.11. Сортировка массива на основе функции....171
7.12. Случайный порядок элементов в массиве....173
7.13. Применение функции к каждому элементу массива....174
7.14. Сокращение массива до одного значения....177
7.15. Итерация по бесконечным или очень большим/ресурсозатратным массивам....179
Глава 8. Классы и объекты....182
Процедурное программирование....183
Объектно-ориентированное программирование....184
Мультипарадигмальные языки....186
Видимость....187
8.1. Инстанцирование объектов из пользовательских классов....190
8.2. Конструирование объектов для определения значений по умолчанию....192
8.3. Определение свойств, доступных только для чтения, в классе....194
8.4. Деконструкция объектов для очистки после того, как объект больше не нужен....197
8.5. Использование магических методов для предоставления динамических свойств....199
8.6. Расширение классов для определения дополнительной функциональности....202
8.7. Принуждение классов к определенному поведению....204
8.8. Создание абстрактных базовых классов....208
8.9. Предотвращение изменений в классах и методах....211
8.10. Клонирование объектов....216
8.11. Определение статических свойств и методов....220
8.12. Интроспекция закрытых свойств или методов внутри объекта....223
8.13. Повторное использование произвольного кода между классами....225
Глава 9. Безопасность и шифрование....229
Унаследованное шифрование....230
Sodium....231
Случайности....236
9.1. Фильтрация, проверка и очистка пользовательского ввода....236
9.2. Защита конфиденциальных учетных данных от попадания в код приложения....242
9.3. Хеширование и валидация паролей....244
9.4. Шифрование и расшифровка данных....247
9.5. Хранение зашифрованных данных в файле....253
9.6. Криптографическая подпись сообщения для отправки другому приложению....258
9.7. Проверка криптографической подписи....260
Глава 10. Работа с файлами....262
Windows или Unix....262
10.1. Создание или открытие локального файла....263
10.2. Чтение файла в строку....265
10.3. Чтение определенного фрагмента файла....267
10.4. Изменение файла ....268
10.5. Одновременная запись в несколько файлов....269
10.6. Блокировка файла ....272
Глава 11. Потоки....274
Обертки и протоколы....275
Фильтры....276
11.1. Потоковая передача данных во временный файл или из него....278
11.2. Чтение из потока ввода PHP....280
11.3. Запись в поток вывода PHP....284
11.4. Чтение из одного потока и запись в другой....286
11.5. Компоновка различных обработчиков потока ....288
11.6. Создание пользовательской обертки потока....292
Глава 12. Обработка ошибок....295
12.1. Поиск и исправление ошибок синтаксиса....295
12.2. Создание и обработка пользовательских исключений....297
12.3. Скрытие сообщений об ошибках от конечных пользователей....300
12.4. Использование пользовательского обработчика ошибок....303
12.5. Регистрация ошибок во внешний поток....305
Глава 13. Отладка и тестирование....307
13.1. Использование расширения отладчика....309
13.2. Написание модульного теста....311
13.3. Автоматизация модульных тестов....316
13.4. Использование статического анализа кода....319
13.5. Запись отладочной информации....321
13.6. Выгрузка содержимого переменных в виде строк....326
13.7. Использование встроенного веб-сервера для быстрого запуска приложения....329
13.8. Использование модульных тестов для обнаружения регрессий в проекте, управляемом системой контроля версий с помощью git-bisect....331
Глава 14. Настройка производительности....336
JIT-компиляция....337
Кэширование опкодов....338
14.1. Измерение времени выполнения функций....339
14.2. Оценка производительности приложения....343
14.3. Ускорение работы приложения с помощью кэша опкодов....350
Глава 15. Пакеты и расширения....353
Стандартные модули....354
Библиотеки/Composer ....355
15.1. Определение проекта Composer....355
15.2. Поиск пакетов Composer....358
15.3. Установка и обновление пакетов Composer....360
15.4. Установка нативных расширений PHP....363
Глава 16. Базы данных....366
Реляционные базы данных....366
База данных «ключ— значение»....367
Графовые базы данных....368
Документоориентированные базы данных....369
16.1. Подключение к базе данных SQLite....369
16.2. Использование PDO для подключения к внешнему провайдеру баз данных....372
16.3. Очистка пользовательского ввода для запроса к базе данных....376
16.4. Имитация данных для интеграционного тестирования....379
16.5. Запрос к базе данных SQL с помощью Eloquent ORM....384
Глава 17. Асинхронный PH5P....388
Библиотеки и среды выполнения....389
Асинхронные операции....390
17.1. Получение данных из удаленных API асинхронно....394
17.2. Ожидание результатов нескольких асинхронных операций....396
17.3. Прерывание одной операции для выполнения другой....398
17.4. Выполнение кода в отдельном потоке....401
17.5. Пересылка сообщений между отдельными потоками....406
17.6. Использование файбера для управления содержимым потока....411
Глава 18. Командная строка PHP....415
18.1. Разбор аргументов программы....416
18.2. Чтение интерактивного пользовательского ввода....420
18.3. Подсветка текста в консоли....421
18.4. Создание консольного приложения с помощью Symfony Console....422
18.5. Использование встроенного в PHP цикла REPL....427
Об авторе....430
Иллюстрация на обложке....431
В этом сборнике рецептов разработчики на PHP найдут надежные и проверенные решения распространенных задач. PHP — удивительно простой язык программирования, что объясняет, почему на нем написано более 75 % веб-сайтов в Интернете. Но он также невероятно терпим к ошибкам программирования, что может привести к тиражированию сомнительного кода.Эрик Манн предлагает собственные рецепты использования современных версий PHP для задач, встречающихся в повседневной практике программиста. Вы познакомитесь с паттернами и примерами, которые пригодятся любому разработчику, и сможете быстро находить и решать сложные задачи, не изобретая велосипед.