Опубликовано

Представляем новинку: “PHP в подлиннике”

PHP 8

В обновленной серии “В подлиннике” вышла новая книга Дмитрия Котерова и Игоря Симдянова “PHP 8”.

Книга предоставляет детальное и полное изложение языка PHP 8 от простого к сложному. Ее можно использовать как для изучения языка с нуля, так и для структурирования знаний, изучения тонких моментов синтаксиса и новых возможностей последней версии. Описываются все значимые новвоведения. Рассматриваются новые типы, атрибуты, перечисления, именованные аргументы, сопоставления, объединенные типы, новые операторы ??= и ?-> и много другое. Основной упор в книге делается на объектно-ориентированные возможности языка, поэтому классы и объекты рассматриваются практически с первых глав. Приведено описание синтаксиса PHP, а тажке инструментов для работы с массивами, файлами, СУБД PostgreSQL, Redis, регулярными выражениями, графическими примитивами, сессиями и т. д.

По сравнению с предыдущей книгой авторов  “PHP 7 ” добавлены 23 новые главы, а остальные обновлены или переработаны.

На сайте издательства находятся  исходные коды всех листингов. В книге описаны:

  • Нововведения с PHP 7.1 по PHP 8.1
  • Объектно-ориентированное программирование
  • Шаблоны проектирования
  • Генераторы, итераторы, перечисления и атрибуты
  • Приемы работы с PostgreSQL и Redis
  • Стандарты PSR
Котеров Дмитрий Владимирович

Котеров Дмитрий Владимирович, системный программист, веб-разработчик с двадцатилетним стажем работы в области веб-программирования, администрирования Linux и Windows, ведущий разработчик хорошо известных в русскоязычном Интернете проектов Денвер (denwer.ru) и Orphus (orphus.ru). В повседневной практике использует языки PHP, JavaScript, Perl, C++, Java. Автор бестселлеров «Самоучитель PHP 4», «PHP 7» и более 50 статей, касающихся веб-программирования.

Симдянов Игорь Вячеславович

Симдянов Игорь Вячеславович, разработчик с двадцатилетним стажем в веб-программировании, ведущий разработчик российской финансово-технологической компании «Баланс-Платформа». Специалист по веб-разработке на PHP, Ruby, JavaScript, SQL. Автор двух десятков книг издательства БХВ по веб-программированию и базам данных, в том числе «PHP 7», «Самоучитель PHP 7», «Самоучитель Ruby».

 

Предисловие…………………………………………………………………………………………… 23

Для кого написана эта книга?…………………………………………………………………………………………………… 23

Исходные коды…………………………………………………………………………………………………………………………… 24

Четвертое издание……………………………………………………………………………………………………………………… 24

Общая структура книги…………………………………………………………………………………………………………….. 26

Часть I…………………………………………………………………………………………………………………………………. 26

Часть II………………………………………………………………………………………………………………………………… 26

Часть III………………………………………………………………………………………………………………………………. 26

Часть IV………………………………………………………………………………………………………………………………. 27

Часть V………………………………………………………………………………………………………………………………… 27

Часть VI………………………………………………………………………………………………………………………………. 27

Часть VII……………………………………………………………………………………………………………………………… 27

Листинги……………………………………………………………………………………………………………………………… 28

Предметный указатель………………………………………………………………………………………………………. 28

Благодарности от Дмитрия Котерова……………………………………………………………………………………… 28

Благодарности от Игоря Симдянова……………………………………………………………………………………….. 29

Часть I. Основы веб-разработки……………………………………………….. 31

Глава 1. Принципы работы Интернета………………………………………………….. 33

Протоколы передачи данных…………………………………………………………………………………………………… 34

Семейство TCP/IP………………………………………………………………………………………………………………………. 36

Протокол IP………………………………………………………………………………………………………………………………… 37

Версии протокола IP…………………………………………………………………………………………………………………. 38

Доменное имя……………………………………………………………………………………………………………………………… 39

Порт…………………………………………………………………………………………………………………………………………….. 41

Резюме…………………………………………………………………………………………………………………………………………. 42

Глава 2. Протокол HTTP………………………………………………………………………… 43

Зачем нужен протокол HTTP?………………………………………………………………………………………………….. 44

Ресурсы……………………………………………………………………………………………………………………………………….. 44

Параметры URL…………………………………………………………………………………………………………………………. 46

Методы……………………………………………………………………………………………………………………………………….. 47

HTTP-сообщения……………………………………………………………………………………………………………………….. 47

HTTP-заголовки…………………………………………………………………………………………………………………………. 50

Content-Type……………………………………………………………………………………………………………………….. 52

Host………………………………………………………………………………………………………………………………………. 52

User-Agent……………………………………………………………………………………………………………………………. 52

Referer………………………………………………………………………………………………………………………………….. 52

Content-length…………………………………………………………………………………………………………………….. 53

Cookie………………………………………………………………………………………………………………………………….. 53

Accept…………………………………………………………………………………………………………………………………… 53

HTTP-коды ответов……………………………………………………………………………………………………………………. 53

Утилита curl……………………………………………………………………………………………………………………………….. 54

Резюме…………………………………………………………………………………………………………………………………………. 57

Глава 3. Установка PHP…………………………………………………………………………. 58

Установка PHP в Windows…………………………………………………………………………………………………………. 58

Переменная окружения PATH…………………………………………………………………………………………………… 59

Установка PHP в macos…………………………………………………………………………………………………………….. 61

Установка PHP в Linux (Ubuntu)………………………………………………………………………………………………. 62

Проверочный скрипт…………………………………………………………………………………………………………………. 62

Ошибки в скриптах…………………………………………………………………………………………………………………….. 63

Запуск встроенного сервера……………………………………………………………………………………………………… 64

Файл hosts…………………………………………………………………………………………………………………………………… 65

Вещание вовне……………………………………………………………………………………………………………………………. 65

Конфигурирование PHP…………………………………………………………………………………………………………….. 66

Интерактивный PHP…………………………………………………………………………………………………………………… 66

Документация…………………………………………………………………………………………………………………………….. 67

Проверка стиля кода………………………………………………………………………………………………………………….. 67

Docker………………………………………………………………………………………………………………………………………….. 69

Резюме…………………………………………………………………………………………………………………………………………. 73

Часть II. Основы языка PHP…………………………………………………………. 75

Глава 4. Характеристика языка PHP……………………………………………………… 77

Что умеет PHP?…………………………………………………………………………………………………………………………… 77

Веб-программирование до PHP………………………………………………………………………………………………… 77

История PHP……………………………………………………………………………………………………………………………….. 79

Что нового в PHP 8?…………………………………………………………………………………………………………………… 82

Нововведения PHP 7.1……………………………………………………………………………………………………….. 82

Нововведения PHP 7.2……………………………………………………………………………………………………….. 83

Нововведения PHP 7.3……………………………………………………………………………………………………….. 83

Нововведения PHP 7.4……………………………………………………………………………………………………….. 83

Нововведения PHP 8.0……………………………………………………………………………………………………….. 83

Нововведения PHP 8.1……………………………………………………………………………………………………….. 84

Где можно узнать об изменениях в синтаксисе?……………………………………………………………… 84

Пример PHP-программы……………………………………………………………………………………………………………. 84

Начальные и конечные теги……………………………………………………………………………………………………… 85

Использование точки с запятой………………………………………………………………………………………………… 87

Фигурные скобки……………………………………………………………………………………………………………………….. 88

Комментарии……………………………………………………………………………………………………………………………… 89

Включение PHP-файла………………………………………………………………………………………………………………. 91

Элементы языка…………………………………………………………………………………………………………………………. 92

Резюме…………………………………………………………………………………………………………………………………………. 92

Глава 5. Переменные и типы данных…………………………………………………….. 93

Переменные………………………………………………………………………………………………………………………………… 94

Типы переменных………………………………………………………………………………………………………………………. 97

Целые числа: integer……………………………………………………………………………………………………………….. 100

Вещественные числа: double………………………………………………………………………………………………….. 102

Логический тип: boolean…………………………………………………………………………………………………………. 104

Строки: string…………………………………………………………………………………………………………………………… 105

Кавычки…………………………………………………………………………………………………………………………….. 105

Оператор <<<……………………………………………………………………………………………………………………. 108

Устройство строки…………………………………………………………………………………………………………… 109

Массивы: array………………………………………………………………………………………………………………………… 110

Объект: object…………………………………………………………………………………………………………………………… 111

Ресурс: resource……………………………………………………………………………………………………………………….. 111

Специальный тип null……………………………………………………………………………………………………………… 112

Действия с переменными…………………………………………………………………………………………………………. 112

Присвоение значения……………………………………………………………………………………………………….. 112

Уничтожение…………………………………………………………………………………………………………………….. 113

Проверка существования………………………………………………………………………………………………… 113

Определение типа переменной……………………………………………………………………………………………….. 115

Некоторые условные обозначения………………………………………………………………………………………… 116

Неявное приведение типа……………………………………………………………………………………………………….. 117

Явное приведение типа……………………………………………………………………………………………………………. 118

Ссылочные переменные………………………………………………………………………………………………………….. 121

Жесткие ссылки………………………………………………………………………………………………………………… 121

«Сбор мусора»………………………………………………………………………………………………………………….. 122

Символические ссылки……………………………………………………………………………………………………. 123

Ссылки на объекты………………………………………………………………………………………………………….. 124

Отладочные функции………………………………………………………………………………………………………………. 125

Резюме………………………………………………………………………………………………………………………………………. 128

Глава 6. Классы и объекты………………………………………………………………….. 129

Объектно-ориентированное программирование………………………………………………………………….. 129

Коды………………………………………………………………………………………………………………………………….. 129

Ассемблер…………………………………………………………………………………………………………………………. 131

Язык высокого уровня……………………………………………………………………………………………………… 132

Специализированный язык программирования……………………………………………………………. 132

Объектно-ориентированные языки программирования……………………………………………….. 133

Зачем нужны классы?……………………………………………………………………………………………………………… 133

Использование готовых классов…………………………………………………………………………………………….. 134

Создание классов…………………………………………………………………………………………………………………….. 136

Разделение классов и остального кода………………………………………………………………………………….. 138

Создание объекта…………………………………………………………………………………………………………………….. 139

Область видимости переменных класса………………………………………………………………………………… 141

Типы переменных класса………………………………………………………………………………………………………… 141

Спецификаторы доступа…………………………………………………………………………………………………………. 145

Свойства «только для чтения»………………………………………………………………………………………………… 146

Дамп объекта……………………………………………………………………………………………………………………………. 149

Статические переменные класса……………………………………………………………………………………………. 150

Ссылки на переменные……………………………………………………………………………………………………………. 151

Клонирование объектов………………………………………………………………………………………………………….. 152

Резюме………………………………………………………………………………………………………………………………………. 153

Глава 7. Константы……………………………………………………………………………… 154

Предопределенные константы……………………………………………………………………………………………….. 154

Создание константы………………………………………………………………………………………………………………… 156

Проверка существования константы……………………………………………………………………………………… 157

Константы с динамическими именами………………………………………………………………………………….. 157

Абсолютный и относительный пути к файлу………………………………………………………………………… 158

Константы класса……………………………………………………………………………………………………………………. 160

Резюме………………………………………………………………………………………………………………………………………. 161

Глава 8. Операторы……………………………………………………………………………… 162

Оператор «точка с запятой»……………………………………………………………………………………………………. 162

Оператор «точка»…………………………………………………………………………………………………………………….. 163

Оператор «запятая»…………………………………………………………………………………………………………………. 166

Арифметические операторы…………………………………………………………………………………………………… 167

Битовые операторы…………………………………………………………………………………………………………………. 170

Операторы сравнения……………………………………………………………………………………………………………… 176

Особенности операторов == и !=…………………………………………………………………………………… 177

Сравнение вещественных чисел……………………………………………………………………………………… 178

Сравнение строк………………………………………………………………………………………………………………. 179

Сравнение составных переменных………………………………………………………………………………… 180

Оператор эквивалентности……………………………………………………………………………………………… 181

Приоритет операторов……………………………………………………………………………………………………………. 183

Резюме………………………………………………………………………………………………………………………………………. 184

Глава 9. Условия………………………………………………………………………………….. 185

Зачем в программе нужно ветвление?……………………………………………………………………………………. 185

Конструкция if………………………………………………………………………………………………………………………….. 186

Логические операторы……………………………………………………………………………………………………………. 189

Логическое И: оператор &&……………………………………………………………………………………………. 190

Логическое ИЛИ: оператор ||………………………………………………………………………………………….. 190

Логическое отрицание: оператор !…………………………………………………………………………………. 194

Условный оператор x ? y : z…………………………………………………………………………………………………….. 194

Оператор ??……………………………………………………………………………………………………………………………… 196

Конструкция switch………………………………………………………………………………………………………………….. 197

Конструкция match………………………………………………………………………………………………………………….. 201

Конструкция goto…………………………………………………………………………………………………………………….. 204

Резюме………………………………………………………………………………………………………………………………………. 205

Глава 10. Циклы………………………………………………………………………………….. 206

Зачем нужны циклы?……………………………………………………………………………………………………………….. 206

Способы организации циклов в PHP……………………………………………………………………………………… 207

Цикл while…………………………………………………………………………………………………………………………………. 207

Вложенные циклы……………………………………………………………………………………………………………………. 209

Досрочное прекращение циклов…………………………………………………………………………………………….. 212

Цикл do … while………………………………………………………………………………………………………………………… 215

Цикл for…………………………………………………………………………………………………………………………………….. 215

Резюме………………………………………………………………………………………………………………………………………. 219

Глава 11. Ассоциативные массивы………………………………………………………. 220

Создание массива……………………………………………………………………………………………………………………. 220

Ассоциативные и индексные массивы…………………………………………………………………………………… 225

Многомерные массивы……………………………………………………………………………………………………………. 227

Интерполяция элементов массива в строки…………………………………………………………………………… 228

Конструкция list()…………………………………………………………………………………………………………………….. 229

Обход массива…………………………………………………………………………………………………………………………. 230

Цикл foreach……………………………………………………………………………………………………………………………… 230

Сечения массива………………………………………………………………………………………………………………………. 233

Слияние массивов……………………………………………………………………………………………………………………. 235

Сравнение массивов………………………………………………………………………………………………………………… 236

Проверка существования элементов массива……………………………………………………………………….. 240

Строки как массивы…………………………………………………………………………………………………………………. 243

Количество элементов в массиве……………………………………………………………………………………………. 243

Сумма элементов массива………………………………………………………………………………………………………. 245

Случайный элемент массива………………………………………………………………………………………………….. 245

Сортировка массива………………………………………………………………………………………………………………… 247

Добавление/удаление элементов…………………………………………………………………………………………… 254

Работа с ключами массива……………………………………………………………………………………………………… 257

Резюме………………………………………………………………………………………………………………………………………. 260

Глава 12. Функции и области видимости……………………………………………… 261

Зачем нужны функции?…………………………………………………………………………………………………………… 261

Создание функции……………………………………………………………………………………………………………………. 263

Ключевое слово return…………………………………………………………………………………………………….. 264

Объявление и вызов функции………………………………………………………………………………………….. 266

Параметры и аргументы…………………………………………………………………………………………………………. 267

Параметры по умолчанию………………………………………………………………………………………………. 270

Переменное число параметров……………………………………………………………………………………….. 272

Именованные аргументы…………………………………………………………………………………………………. 274

Типы аргументов и возвращаемого значения……………………………………………………………………….. 275

Передача параметров по ссылке……………………………………………………………………………………………. 278

Локальные переменные…………………………………………………………………………………………………………… 278

Глобальные переменные…………………………………………………………………………………………………………. 279

Массив $GLOBALS…………………………………………………………………………………………………………… 280

Как работает инструкция global?…………………………………………………………………………………… 282

Статические переменные………………………………………………………………………………………………………… 283

Резюме………………………………………………………………………………………………………………………………………. 284

Глава 13. Сложные функции………………………………………………………………… 285

Рекурсивные функции……………………………………………………………………………………………………………… 285

Вложенные функции………………………………………………………………………………………………………………… 288

Переменные функции………………………………………………………………………………………………………………. 289

Функции обратного вызова…………………………………………………………………………………………………….. 291

Анонимные функции………………………………………………………………………………………………………………… 300

Замыкания………………………………………………………………………………………………………………………………… 303

Стрелочные функции………………………………………………………………………………………………………………. 304

Резюме………………………………………………………………………………………………………………………………………. 305

Глава 14. Методы класса……………………………………………………………………… 306

Создание метода……………………………………………………………………………………………………………………… 306

Обращение к методам объекта……………………………………………………………………………………………….. 307

Проверка существования метода…………………………………………………………………………………………… 309

Специальные методы………………………………………………………………………………………………………………. 313

Конструктор __construct()………………………………………………………………………………………………………. 314

Параметры конструктора……………………………………………………………………………………………………….. 316

Деструктор __destruct()…………………………………………………………………………………………………………… 319

Методы-аксессоры………………………………………………………………………………………………………………….. 320

Статические методы………………………………………………………………………………………………………………… 325

Класс — self, объект — $this…………………………………………………………………………………………………… 325

Динамические методы…………………………………………………………………………………………………………….. 328

Интерполяция объекта…………………………………………………………………………………………………………….. 331

Тип callable………………………………………………………………………………………………………………………………. 332

Оператор ?->……………………………………………………………………………………………………………………………. 335

Резюме………………………………………………………………………………………………………………………………………. 337

Глава 15. Генераторы…………………………………………………………………………… 338

Отложенные вычисления………………………………………………………………………………………………………… 338

Манипуляция массивами………………………………………………………………………………………………………… 341

Делегирование генераторов……………………………………………………………………………………………………. 343

Экономия ресурсов………………………………………………………………………………………………………………….. 344

Использование ключей……………………………………………………………………………………………………………. 345

Использование ссылки…………………………………………………………………………………………………………….. 346

Связь генераторов c объектами………………………………………………………………………………………………. 347

Резюме………………………………………………………………………………………………………………………………………. 349

Часть III. Обработка текста и язык разметки HTML…………. 351

Глава 16. Строковые функции……………………………………………………………… 353

Кодировки………………………………………………………………………………………………………………………………… 353

Строки как массивы…………………………………………………………………………………………………………………. 357

UTF-8: расширение mbstring…………………………………………………………………………………………………… 358

Поиск в строке………………………………………………………………………………………………………………………….. 360

Отрезание пробелов………………………………………………………………………………………………………………… 361

Замена в тексте………………………………………………………………………………………………………………………… 363

Установка локали (локальных настроек)……………………………………………………………………………… 365

Работа с HTML-кодом…………………………………………………………………………………………………………….. 367

Функции форматных преобразований…………………………………………………………………………………… 373

Объединение и разбиение строк…………………………………………………………………………………………….. 376

Сериализация объектов и массивов……………………………………………………………………………………….. 377

JSON-формат…………………………………………………………………………………………………………………………….. 378

Резюме………………………………………………………………………………………………………………………………………. 381

Глава 17. Язык разметки HTML…………………………………………………………… 382

Зачем нужен HTML?……………………………………………………………………………………………………………….. 382

HTML-код страницы……………………………………………………………………………………………………………….. 383

Устройство HTML-страницы…………………………………………………………………………………………………. 385

Параграф: тег <p>…………………………………………………………………………………………………………… 388

Гиперссылки: тег <a>……………………………………………………………………………………………………… 391

Комментарии……………………………………………………………………………………………………………………. 391

Заголовки: теги <h1><h6>………………………………………………………………………………………….. 392

Блоки: тег <div>………………………………………………………………………………………………………………. 392

Списки: теги <ul>, <ol> и <li>…………………………………………………………………………………………… 394

HTML на уровне текста…………………………………………………………………………………………………… 395

Изображения: тег <img>…………………………………………………………………………………………………. 397

Каскадные таблицы стилей……………………………………………………………………………………………………. 399

Резюме………………………………………………………………………………………………………………………………………. 402

Глава 18. Работа с данными формы……………………………………………………… 403

Передача параметров методом GET……………………………………………………………………………………… 403

HTML-форма и ее обработчик……………………………………………………………………………………………….. 406

Текстовое поле…………………………………………………………………………………………………………………………. 411

Поле для приема пароля…………………………………………………………………………………………………………. 411

Текстовая область……………………………………………………………………………………………………………………. 412

Скрытое поле……………………………………………………………………………………………………………………………. 414

Флажок……………………………………………………………………………………………………………………………………… 415

Список………………………………………………………………………………………………………………………………………. 417

Переключатель………………………………………………………………………………………………………………………… 419

Переадресация…………………………………………………………………………………………………………………………. 420

Резюме………………………………………………………………………………………………………………………………………. 423

Глава 19. Загрузка файлов на сервер……………………………………………………. 424

Multipart-формы………………………………………………………………………………………………………………………. 424

Тег выбора файла…………………………………………………………………………………………………………………….. 425

Закачка файлов и безопасность……………………………………………………………………………………………… 425

Поддержка закачки в PHP……………………………………………………………………………………………………….. 426

Простые имена полей закачки………………………………………………………………………………………… 426

Получение закачанного файла……………………………………………………………………………………….. 428

Пример: фотоальбом……………………………………………………………………………………………………….. 429

Сложные имена полей……………………………………………………………………………………………………… 432

Резюме………………………………………………………………………………………………………………………………………. 434

Глава 20. Суперглобальные массивы…………………………………………………… 435

Типы суперглобальных массивов………………………………………………………………………………………….. 435

Cookie……………………………………………………………………………………………………………………………………….. 436

Сессии……………………………………………………………………………………………………………………………………….. 438

Переменные окружения…………………………………………………………………………………………………………… 440

Массив $_SERVER…………………………………………………………………………………………………………………… 441

Элемент $_SERVER[‘DOCUMENT_ROOT’]……………………………………………………………………. 441

Элемент $_SERVER[‘HTTP_ACCEPT’]…………………………………………………………………………… 441

Элемент $_SERVER[‘HTTP_HOST’]………………………………………………………………………………… 442

Элемент $_SERVER[‘HTTP_REFERER’]…………………………………………………………………………. 442

Элемент $_SERVER[‘HTTP_USER_AGENT’]………………………………………………………………….. 443

Элемент $_SERVER[‘REMOTE_ADDR’]………………………………………………………………………….. 443

Элемент $_SERVER[‘SCRIPT_FILENAME’]……………………………………………………………………. 443

Элемент $_SERVER[‘SERVER_NAME’]………………………………………………………………………….. 444

Элемент $_SERVER[‘REQUEST_METHOD’]…………………………………………………………………… 444

Элемент $_SERVER[‘QUERY_STRING’]………………………………………………………………………….. 444

Элемент $_SERVER[‘PHP_SELF’]…………………………………………………………………………………… 445

Элемент $_SERVER[‘REQUEST_URI’]……………………………………………………………………………. 445

Резюме………………………………………………………………………………………………………………………………………. 446

Глава 21. Фильтрация и проверка данных…………………………………………… 447

Фильтрация или проверка?…………………………………………………………………………………………………….. 447

Проверка данных…………………………………………………………………………………………………………………….. 449

Фильтры проверки…………………………………………………………………………………………………………………… 450

Значения по умолчанию…………………………………………………………………………………………………………. 455

Фильтры очистки……………………………………………………………………………………………………………………… 456

Пользовательская фильтрация данных…………………………………………………………………………………. 459

Фильтрация внешних данных…………………………………………………………………………………………………. 460

Конфигурационный файл php.ini…………………………………………………………………………………………… 462

Резюме………………………………………………………………………………………………………………………………………. 463

Часть IV. Стандартные функции PHP…………………………………….. 465

Глава 22. Математические функции…………………………………………………….. 467

Встроенные константы……………………………………………………………………………………………………………. 467

Функции округления………………………………………………………………………………………………………………… 468

Функция abs()……………………………………………………………………………………………………………………. 468

Функция round()……………………………………………………………………………………………………………….. 468

Функция ceil()……………………………………………………………………………………………………………………. 469

Функция floor()…………………………………………………………………………………………………………………. 470

Случайные числа…………………………………………………………………………………………………………………….. 470

Функция rand()………………………………………………………………………………………………………………….. 470

Функция getrandmax()………………………………………………………………………………………………………. 472

Функция random_int()………………………………………………………………………………………………………. 472

Перевод в различные системы счисления……………………………………………………………………………… 472

Функция base_convert()……………………………………………………………………………………………………. 472

Функции bindec(), hexdec() и octdec()……………………………………………………………………………… 473

Функции decbin(), decoct() и dechex()……………………………………………………………………………… 473

Минимум и максимум……………………………………………………………………………………………………………… 473

Функция min()……………………………………………………………………………………………………………………. 473

Функция max()…………………………………………………………………………………………………………………… 473

Не-числа…………………………………………………………………………………………………………………………………… 474

Функция is_nan()………………………………………………………………………………………………………………. 474

Функция is_infinite()…………………………………………………………………………………………………………. 474

Степенные функции…………………………………………………………………………………………………………………. 474

Функция sqrt()…………………………………………………………………………………………………………………… 474

Функция log()……………………………………………………………………………………………………………………. 475

Функция exp()……………………………………………………………………………………………………………………. 475

Функция pow()…………………………………………………………………………………………………………………… 475

Тригонометрия…………………………………………………………………………………………………………………………. 475

Резюме………………………………………………………………………………………………………………………………………. 477

Глава 23. Работа с файлами………………………………………………………………….. 478

О текстовых и бинарных файлах……………………………………………………………………………………………. 478

Открытие файла……………………………………………………………………………………………………………………….. 479

Различия текстового и бинарного режимов…………………………………………………………………… 481

Сетевые соединения…………………………………………………………………………………………………………. 481

Прямые и обратные слеши………………………………………………………………………………………………. 482

Безымянные временные файлы……………………………………………………………………………………….. 483

Закрытие файла……………………………………………………………………………………………………………………….. 483

Чтение и запись………………………………………………………………………………………………………………………… 483

Блочные чтение/запись……………………………………………………………………………………………………. 484

Построчные чтение/запись……………………………………………………………………………………………… 485

Чтение CSV-файла……………………………………………………………………………………………………………. 485

Положение указателя текущей позиции………………………………………………………………………………… 486

Работа с путями……………………………………………………………………………………………………………………….. 488

Манипулирование целыми файлами……………………………………………………………………………………… 490

Чтение и запись целого файла………………………………………………………………………………………… 490

Чтение INI-файла……………………………………………………………………………………………………………… 492

Другие функции……………………………………………………………………………………………………………………….. 493

Блокирование файла……………………………………………………………………………………………………………….. 494

Рекомендательная и жесткая блокировки……………………………………………………………………… 494

Функция flock()…………………………………………………………………………………………………………………. 495

Типы блокировок……………………………………………………………………………………………………………… 495

Исключительная блокировка…………………………………………………………………………………. 495

«Не убий!»……………………………………………………………………………………………………….. 496

«Посади дерево»……………………………………………………………………………………………… 497

«Следи за собой, будь осторожен»……………………………………………………………….. 497

Выводы……………………………………………………………………………………………………………. 498

Разделяемая блокировка………………………………………………………………………………………… 498

Выводы……………………………………………………………………………………………………………. 500

Блокировки с запретом «подвисания»……………………………………………………………………………. 500

Пример счетчика………………………………………………………………………………………………………………. 500

Резюме………………………………………………………………………………………………………………………………………. 501

Глава 24. Работа с каталогами……………………………………………………………… 502

Текущий каталог……………………………………………………………………………………………………………………… 502

Создание каталога…………………………………………………………………………………………………………………… 503

Работа с записями……………………………………………………………………………………………………………………. 504

Рекурсивный обход каталога…………………………………………………………………………………………………. 505

Фильтрация содержимого каталога………………………………………………………………………………………. 506

Удаление каталога………………………………………………………………………………………………………………….. 508

Класс Directory…………………………………………………………………………………………………………………………. 509

Резюме………………………………………………………………………………………………………………………………………. 511

Глава 25. Права доступа и атрибуты файлов……………………………………….. 512

Идентификатор пользователя…………………………………………………………………………………………………. 512

Идентификатор группы…………………………………………………………………………………………………………… 513

Владелец файла……………………………………………………………………………………………………………………….. 514

Права доступа………………………………………………………………………………………………………………………….. 514

Числовое представление прав доступа………………………………………………………………………….. 515

Особенности каталогов…………………………………………………………………………………………………… 515

Примеры……………………………………………………………………………………………………………………………. 517

Домашний каталог пользователя………………………………………………………………………….. 517

Защищенный от записи файл…………………………………………………………………………………. 517

CGI-скрипт………………………………………………………………………………………………………………. 517

Системные утилиты………………………………………………………………………………………………… 517

Закрытые системные файлы………………………………………………………………………………….. 518

Функции PHP……………………………………………………………………………………………………………………………. 518

Назначение прав доступа……………………………………………………………………………………………….. 518

Определение атрибутов файла……………………………………………………………………………………….. 520

Специальные функции……………………………………………………………………………………………. 521

Определение типа файла……………………………………………………………………………………….. 522

Определение возможности доступа……………………………………………………………………………….. 523

Ссылки………………………………………………………………………………………………………………………………………. 524

Символические ссылки……………………………………………………………………………………………………. 524

Жесткие ссылки………………………………………………………………………………………………………………… 524

Резюме………………………………………………………………………………………………………………………………………. 525

Глава 26. Запуск внешних программ……………………………………………………. 526

Запуск утилит…………………………………………………………………………………………………………………………… 526

Оператор «обратные кавычки»………………………………………………………………………………………………. 528

Экранирование командной строки………………………………………………………………………………………… 528

Каналы……………………………………………………………………………………………………………………………………… 529

Временные файлы……………………………………………………………………………………………………………. 529

Открытие канала……………………………………………………………………………………………………………… 530

Взаимная блокировка (deadlock)……………………………………………………………………………………. 531

Резюме………………………………………………………………………………………………………………………………………. 533

Глава 27. Работа с датой и временем……………………………………………………. 534

Представление времени в формате timestamp………………………………………………………………………. 534

Вычисление времени работы скрипта……………………………………………………………………………. 535

Большие вещественные числа………………………………………………………………………………………… 536

Построение строкового представления даты………………………………………………………………… 537

Построение timestamp……………………………………………………………………………………………………… 539

Разбор timestamp……………………………………………………………………………………………………………… 541

Календарик………………………………………………………………………………………………………………………………. 542

Географическая привязка……………………………………………………………………………………………………….. 544

Хранение абсолютного времени…………………………………………………………………………………….. 547

Перевод времени………………………………………………………………………………………………………………. 548

Окончательное решение задачи……………………………………………………………………………………… 549

Календарные классы PHP………………………………………………………………………………………………………. 549

Класс DateTime…………………………………………………………………………………………………………………. 549

Класс DateTimeZone…………………………………………………………………………………………………………. 551

Класс DateInterval……………………………………………………………………………………………………………. 551

Класс DatePeriod……………………………………………………………………………………………………………… 553

Резюме………………………………………………………………………………………………………………………………………. 554

Глава 28. Основы регулярных выражений…………………………………………… 555

Начнем с примеров………………………………………………………………………………………………………………….. 555

Пример первый…………………………………………………………………………………………………………………. 555

Пример второй………………………………………………………………………………………………………………….. 556

Пример третий………………………………………………………………………………………………………………….. 556

Пример четвертый……………………………………………………………………………………………………………. 557

Что такое регулярные выражения?………………………………………………………………………………………… 558

Терминология…………………………………………………………………………………………………………………………… 558

Использование регулярных выражений в PHP……………………………………………………………………… 559

Сопоставление…………………………………………………………………………………………………………………. 559

Сопоставление с заменой………………………………………………………………………………………………… 560

Язык регулярных выражений…………………………………………………………………………………………………. 561

Ограничители…………………………………………………………………………………………………………………… 561

Альтернативные ограничители……………………………………………………………………………… 562

Отмена действия спецсимволов…………………………………………………………………………….. 563

Простые символы…………………………………………………………………………………………………………….. 564

Классы символов…………………………………………………………………………………………………….. 564

Альтернативы………………………………………………………………………………………………………….. 564

Отрицательные классы…………………………………………………………………………………………… 566

Квантификаторы повторений…………………………………………………………………………………………. 566

Ноль или более совпадений…………………………………………………………………………………… 566

Одно или более совпадений…………………………………………………………………………………… 566

Ноль или одно совпадение…………………………………………………………………………………….. 567

Заданное число совпадений………………………………………………………………………………….. 567

Мнимые символы……………………………………………………………………………………………………………… 567

Оператор альтернативы………………………………………………………………………………………………….. 568

Группирующие скобки…………………………………………………………………………………………………….. 568

«Карманы»………………………………………………………………………………………………………………………… 568

Карманы в функции замены…………………………………………………………………………………… 570

Карманы в функции сопоставления………………………………………………………………………. 571

Игнорирование карманов………………………………………………………………………………………. 572

Именованные карманы…………………………………………………………………………………………… 572

«Жадность» квантификаторов………………………………………………………………………………………… 572

Рекуррентные структуры……………………………………………………………………………………….. 574

Модификаторы…………………………………………………………………………………………………………………. 574

Модификатор /i — игнорирование регистра……………………………………………………….. 574

Модификатор /x — пропуск пробелов и комментариев………………………………………. 574

Модификатор /m — многострочность…………………………………………………………………… 575

Модификатор /s — однострочный поиск……………………………………………………………… 576

Модификатор /u — UTF-8………………………………………………………………………………………. 576

Модификатор /U — инвертируем «жадность»……………………………………………………… 576

Незахватывающий поиск………………………………………………………………………………………………… 576

Позитивный просмотр вперед………………………………………………………………………………… 576

Негативный просмотр вперед………………………………………………………………………………… 577

Позитивный просмотр назад………………………………………………………………………………….. 577

Негативный просмотр назад………………………………………………………………………………….. 578

Другие возможности регулярных выражений……………………………………………………………….. 578

Функции PHP……………………………………………………………………………………………………………………………. 578

Поиск совпадений…………………………………………………………………………………………………………….. 578

Замена совпадений………………………………………………………………………………………………………….. 582

Разбиение по регулярному выражению…………………………………………………………………………. 585

Выделение всех уникальных слов из текста………………………………………………………… 585

Экранирование символов………………………………………………………………………………………………… 586

Фильтрация массива………………………………………………………………………………………………………… 587

Примеры регулярных выражений………………………………………………………………………………………….. 588

Преобразование адресов e-mail……………………………………………………………………………………… 588

Преобразование гиперссылок…………………………………………………………………………………………. 588

Быть или не быть?……………………………………………………………………………………………………………………. 589

Ссылки………………………………………………………………………………………………………………………………………. 590

Резюме………………………………………………………………………………………………………………………………………. 590

Глава 29. Разные функции…………………………………………………………………… 591

Информационные функции……………………………………………………………………………………………………… 591

Принудительное завершение программы……………………………………………………………………………… 593

Генерация кода во время выполнения……………………………………………………………………………………. 593

Функции хеширования…………………………………………………………………………………………………………….. 595

Подсветка PHP-кода………………………………………………………………………………………………………………… 600

Резюме………………………………………………………………………………………………………………………………………. 601

Часть V. Основы объектно-ориентированного программирования 603

Глава 30. Наследование……………………………………………………………………….. 605

Расширение класса………………………………………………………………………………………………………………….. 606

Метод включения…………………………………………………………………………………………………………….. 607

Недостатки метода включения……………………………………………………………………………… 608

Несовместимость типов………………………………………………………………………………………….. 609

Наследование…………………………………………………………………………………………………………………… 609

Переопределение методов………………………………………………………………………………………………. 611

Модификаторы доступа при переопределении…………………………………………………… 611

Доступ к методам базового класса……………………………………………………………………….. 611

Финальные методы…………………………………………………………………………………………………. 612

Запрет наследования……………………………………………………………………………………………… 612

Константы __CLASS__ и __METHOD__………………………………………………………………………… 613

Позднее статическое связывание……………………………………………………………………………………. 613

Анонимные классы………………………………………………………………………………………………………………….. 614

Полиморфизм……………………………………………………………………………………………………………………………. 616

Абстрагирование……………………………………………………………………………………………………………… 616

Виртуальные методы………………………………………………………………………………………………………. 621

Расширение иерархии……………………………………………………………………………………………………… 625

Абстрактные классы и методы……………………………………………………………………………………………….. 625

Совместимость родственных типов……………………………………………………………………………………….. 627

Уточнение типа в функциях…………………………………………………………………………………………….. 627

Оператор instanceof…………………………………………………………………………………………………………. 628

Обратное преобразование типа……………………………………………………………………………………… 629

Резюме………………………………………………………………………………………………………………………………………. 629

Глава 31. Интерфейсы………………………………………………………………………….. 630

Ограничения наследования…………………………………………………………………………………………………….. 630

Создание интерфейса………………………………………………………………………………………………………………. 633

Наследование интерфейсов……………………………………………………………………………………………………. 635

Реализация нескольких интерфейсов…………………………………………………………………………………….. 638

Реализует ли объект интерфейс?……………………………………………………………………………………………. 640

Резюме………………………………………………………………………………………………………………………………………. 641

Глава 32. Трейты………………………………………………………………………………….. 642

Создание трейта………………………………………………………………………………………………………………………. 642

Трейты и наследование…………………………………………………………………………………………………………… 645

Разрешение конфликтов………………………………………………………………………………………………………….. 648

Вложенные трейты………………………………………………………………………………………………………………….. 650

Резюме………………………………………………………………………………………………………………………………………. 651

Глава 33. Перечисления……………………………………………………………………….. 652

Создание перечисления…………………………………………………………………………………………………………… 652

Типизированные перечисления………………………………………………………………………………………………. 655

Сравнение значений………………………………………………………………………………………………………………… 658

Перечисления как классы……………………………………………………………………………………………………….. 658

Ограничения перечислений…………………………………………………………………………………………….. 658

Методы перечислений…………………………………………………………………………………………………….. 659

Использование трейтов……………………………………………………………………………………………………. 662

Константы………………………………………………………………………………………………………………………… 663

Резюме………………………………………………………………………………………………………………………………………. 664

Глава 34. Исключения………………………………………………………………………….. 665

Базовый синтаксис…………………………………………………………………………………………………………………… 665

Конструкция throw…………………………………………………………………………………………………………………… 667

Раскрутка стека……………………………………………………………………………………………………………………….. 667

Исключения и деструкторы…………………………………………………………………………………………………….. 668

Интерфейс класса Exception…………………………………………………………………………………………………… 670

Генерация исключений в классах………………………………………………………………………………………….. 672

Создание собственных исключений………………………………………………………………………………………. 675

Перехват собственных исключений………………………………………………………………………………………. 678

Повторная генерация исключений…………………………………………………………………………………………. 679

Блок finally……………………………………………………………………………………………………………………………….. 681

Использование интерфейсов…………………………………………………………………………………………………… 682

Резюме………………………………………………………………………………………………………………………………………. 684

Глава 35. Обработка ошибок……………………………………………………………….. 685

Что такое ошибка?…………………………………………………………………………………………………………………… 685

Роли ошибок……………………………………………………………………………………………………………………… 686

Виды ошибок……………………………………………………………………………………………………………………. 686

Ошибки и исключения……………………………………………………………………………………………………………… 687

Контроль ошибок…………………………………………………………………………………………………………………….. 689

Директивы контроля ошибок………………………………………………………………………………………….. 689

Установка режима вывода ошибок………………………………………………………………………………… 691

Оператор отключения ошибок……………………………………………………………………………………….. 692

Предостережения……………………………………………………………………………………………………. 693

Перехват ошибок……………………………………………………………………………………………………………… 693

Проблемы с оператором @……………………………………………………………………………………. 695

Генерация ошибок……………………………………………………………………………………………………………. 696

Стек вызовов функций……………………………………………………………………………………………………… 697

Резюме………………………………………………………………………………………………………………………………………. 699

Глава 36. Пространство имен……………………………………………………………….. 700

Проблема именования…………………………………………………………………………………………………………….. 700

Объявление пространства имен……………………………………………………………………………………………… 701

Иерархия пространства имен…………………………………………………………………………………………………. 705

Текущее пространство имен…………………………………………………………………………………………………… 706

Импортирование………………………………………………………………………………………………………………………. 707

Автозагрузка классов………………………………………………………………………………………………………………. 708

Функция spl_autoload_register()……………………………………………………………………………………… 708

Резюме………………………………………………………………………………………………………………………………………. 711

Глава 37. Шаблоны проектирования……………………………………………………. 712

Зачем нужны шаблоны проектирования?……………………………………………………………………………… 713

Одиночка (Singleton)………………………………………………………………………………………………………………… 713

Фабричный метод (Factory Method)………………………………………………………………………………………. 715

Модель-Представление-Контроллер…………………………………………………………………………………….. 720

Резюме………………………………………………………………………………………………………………………………………. 731

Глава 38. Итераторы…………………………………………………………………………….. 732

Стандартное поведение foreach…………………………………………………………………………………………….. 732

Интерфейсы для создания итераторов…………………………………………………………………………………… 733

Интерфейс Iterator……………………………………………………………………………………………………………. 734

Интерфейс IteratorAggregate…………………………………………………………………………………………… 736

Пример собственного итератора……………………………………………………………………………………. 737

Как PHP обрабатывает итераторы?………………………………………………………………………………………. 740

Множественные итераторы……………………………………………………………………………………………………. 740

Виртуальные массивы…………………………………………………………………………………………………………….. 741

Библиотека SPL……………………………………………………………………………………………………………………….. 743

Класс ArrayObject…………………………………………………………………………………………………………….. 744

Класс DirectoryIterator…………………………………………………………………………………………………….. 744

Класс FilterIterator…………………………………………………………………………………………………………… 745

Класс LimitIterator……………………………………………………………………………………………………………. 746

Рекурсивные итераторы………………………………………………………………………………………………….. 747

Резюме………………………………………………………………………………………………………………………………………. 748

Глава 39. Отражения……………………………………………………………………………. 749

Механизм отражений………………………………………………………………………………………………………………. 749

Отражение функции: ReflectionFunction……………………………………………………………………….. 750

Отражение параметра функции: ReflectionParameter………………………………………………….. 753

Отражение класса: ReflectionClass………………………………………………………………………………… 755

Пояснение: отражения и наследование…………………………………………………………………………. 760

Отражение свойства класса: ReflectionProperty…………………………………………………………… 762

Отражение метода класса: ReflectionMethod………………………………………………………………… 763

Отражение библиотеки расширения: ReflectionExtension……………………………………………. 765

Полезное добавление: класс Reflection………………………………………………………………………….. 766

Обработка исключений: ReflectionException………………………………………………………………… 767

Иерархия…………………………………………………………………………………………………………………………… 767

Резюме………………………………………………………………………………………………………………………………………. 767

Часть VI. Расширения PHP………………………………………………………….. 769

Глава 40. Подключение и настройка расширений……………………………….. 771

Подключение расширений……………………………………………………………………………………………………… 771

Конфигурационный файл php.ini…………………………………………………………………………………………… 773

Структура php.ini…………………………………………………………………………………………………………….. 773

Параметры языка PHP……………………………………………………………………………………………………… 774

Ограничение ресурсов…………………………………………………………………………………………………….. 776

Загрузка файлов……………………………………………………………………………………………………………….. 777

Обзор расширений…………………………………………………………………………………………………………………… 777

Резюме………………………………………………………………………………………………………………………………………. 778

Глава 41. Работа с PostgreSQL……………………………………………………………… 779

Что такое база данных?………………………………………………………………………………………………………….. 780

Неудобство работы с файлами………………………………………………………………………………………. 780

Почему PostgreSQL?…………………………………………………………………………………………………………. 781

Установка PostgreSQL……………………………………………………………………………………………………………… 782

Установка в Windows……………………………………………………………………………………………………….. 782

Установка в macos…………………………………………………………………………………………………………… 784

Установка в Linux Ubuntu……………………………………………………………………………………………….. 784

Администрирование базы данных…………………………………………………………………………………. 785

Введение в СУБД и SQL………………………………………………………………………………………………………….. 785

Первичные ключи…………………………………………………………………………………………………………….. 788

Управление базами данных……………………………………………………………………………………………. 790

Управление таблицами……………………………………………………………………………………………………. 792

Создание таблицы………………………………………………………………………………………………….. 792

Извлечение структуры таблицы……………………………………………………………………………. 793

Изменение структуры таблицы……………………………………………………………………………… 793

Удаление таблицы………………………………………………………………………………………………….. 796

Комментарии в SQL…………………………………………………………………………………………………………. 797

Вставка записей в таблицу……………………………………………………………………………………………… 798

Удаление записей…………………………………………………………………………………………………………….. 801

Обновление записей…………………………………………………………………………………………………………. 802

Выборка данных………………………………………………………………………………………………………………. 803

Условная выборка…………………………………………………………………………………………………… 804

Псевдонимы столбцов…………………………………………………………………………………………….. 807

Сортировка записей……………………………………………………………………………………………….. 808

Вывод записей в случайном порядке……………………………………………………………………. 811

Ограничение выборки…………………………………………………………………………………………….. 811

Вывод уникальных значений…………………………………………………………………………………. 812

Резюме………………………………………………………………………………………………………………………………………. 813

Глава 42. Расширение PDO………………………………………………………………….. 814

Настройка PDO………………………………………………………………………………………………………………………… 814

Установка соединения с базой данных…………………………………………………………………………………. 815

Выполнение SQL-запросов……………………………………………………………………………………………………… 816

Обработка ошибок…………………………………………………………………………………………………………………… 817

Извлечение данных………………………………………………………………………………………………………………….. 818

Параметризация SQL-запросов………………………………………………………………………………………………. 820

Заполнение связанных таблиц……………………………………………………………………………………………….. 822

Резюме………………………………………………………………………………………………………………………………………. 824

Глава 43. Работа с изображениями……………………………………………………….. 825

Универсальная функция getimagesize()………………………………………………………………………………….. 826

Работа с изображениями и библиотека GD…………………………………………………………………………… 827

Пример создания изображения………………………………………………………………………………………………. 828

Создание изображения……………………………………………………………………………………………………………. 829

Загрузка изображения…………………………………………………………………………………………………………….. 829

Определение параметров изображения…………………………………………………………………………………. 830

Сохранение изображения……………………………………………………………………………………………………….. 831

Преобразование изображения в палитровое………………………………………………………………………… 832

Работа с цветом в формате RGB…………………………………………………………………………………………….. 832

Создание нового цвета…………………………………………………………………………………………………….. 832

Текстовое представление цвета……………………………………………………………………………………… 833

Получение ближайшего в палитре цвета………………………………………………………………………. 833

Эффект прозрачности………………………………………………………………………………………………………. 834

Получение RGB-составляющих……………………………………………………………………………………… 835

Использование полупрозрачных цветов……………………………………………………………………….. 835

Графические примитивы…………………………………………………………………………………………………………. 836

Копирование изображений……………………………………………………………………………………………… 836

Прямоугольники……………………………………………………………………………………………………………….. 838

Выбор пера……………………………………………………………………………………………………………………….. 839

Линии………………………………………………………………………………………………………………………………… 840

Дуга сектора…………………………………………………………………………………………………………………….. 840

Закраска произвольной области…………………………………………………………………………………….. 841

Закраска текстурой………………………………………………………………………………………………………….. 841

Многоугольники………………………………………………………………………………………………………………. 842

Работа с пикселами………………………………………………………………………………………………………….. 843

Работа с фиксированными шрифтами……………………………………………………………………………………. 843

Загрузка шрифта………………………………………………………………………………………………………………. 844

Параметры шрифта………………………………………………………………………………………………………….. 844

Вывод строки……………………………………………………………………………………………………………………. 844

Работа со шрифтами TrueType……………………………………………………………………………………………….. 845

Вывод строки……………………………………………………………………………………………………………………. 845

Проблемы с русскими буквами……………………………………………………………………………………….. 846

Определение границ строки……………………………………………………………………………………………. 846

Коррекция функции imageTtfBBox()……………………………………………………………………………….. 847

Пример………………………………………………………………………………………………………………………………. 849

Резюме………………………………………………………………………………………………………………………………………. 851

Глава 44. Работа с сетью………………………………………………………………………. 852

Файловые функции и потоки…………………………………………………………………………………………………… 852

Другие схемы……………………………………………………………………………………………………………………. 853

Контекст потока……………………………………………………………………………………………………………….. 854

Работа с сокетами……………………………………………………………………………………………………………………. 857

«Эмуляция» браузера………………………………………………………………………………………………………. 858

Неблокирующее чтение…………………………………………………………………………………………………… 859

Функции для работы с DNS…………………………………………………………………………………………………….. 859

Расширение CURL…………………………………………………………………………………………………………………… 860

Отправка данных методом POST……………………………………………………………………………………………. 865

Передача пользовательского агента……………………………………………………………………………………… 867

Резюме………………………………………………………………………………………………………………………………………. 868

Глава 45. NoSQL-база данных Redis…………………………………………………….. 869

Почему Redis?…………………………………………………………………………………………………………………………… 870

Установка сервера Redis…………………………………………………………………………………………………………. 871

В среде Linux Ubuntu……………………………………………………………………………………………………….. 871

В среде macos…………………………………………………………………………………………………………………… 871

В среде Windows………………………………………………………………………………………………………………. 871

Проверка работоспособности………………………………………………………………………………………… 872

Клиент redis-cli………………………………………………………………………………………………………………………….. 872

Вставка и получение значений………………………………………………………………………………………………. 873

Обновление и удаление значений………………………………………………………………………………………….. 874

Управление ключами………………………………………………………………………………………………………………. 876

Время жизни ключа…………………………………………………………………………………………………………………. 876

Типы данных……………………………………………………………………………………………………………………………. 877

Хеш …………………………………………………………………………………………………………………………………………… 878

Множество……………………………………………………………………………………………………………………………….. 879

Отсортированное множество………………………………………………………………………………………………….. 881

Базы данных…………………………………………………………………………………………………………………………….. 882

Производительность Redis………………………………………………………………………………………………………. 883

PHP-расширение Redis…………………………………………………………………………………………………………….. 884

Установка расширения php-redis……………………………………………………………………………………. 884

Хранение сессий в Redis………………………………………………………………………………………………….. 885

Методы для обслуживания данных в Redis…………………………………………………………………… 886

Кеширование данных………………………………………………………………………………………………………. 888

Резюме………………………………………………………………………………………………………………………………………. 893

Часть VII. Компоненты………………………………………………………………. 895

Глава 46. Управление компонентами…………………………………………………… 897

Composer: управление компонентами…………………………………………………………………………………… 897

Установка Composer……………………………………………………………………………………………………………….. 898

Установка в Windows……………………………………………………………………………………………………….. 898

Установка в macos…………………………………………………………………………………………………………… 900

Установка в Linux Ubuntu……………………………………………………………………………………………….. 900

Где искать компоненты?…………………………………………………………………………………………………………. 900

Установка компонента……………………………………………………………………………………………………………. 900

Использование компонента…………………………………………………………………………………………………….. 903

Полезные компоненты…………………………………………………………………………………………………………….. 904

Компонент psySH: интерактивный отладчик………………………………………………………………… 904

Компонент phinx: миграции……………………………………………………………………………………………. 905

Инициализация компонента…………………………………………………………………………………… 906

Подготовка миграций……………………………………………………………………………………………… 908

Выполнение миграций……………………………………………………………………………………………. 911

Откат миграций……………………………………………………………………………………………………….. 912

Операции со столбцами…………………………………………………………………………………………. 913

Подготовка тестовых данных………………………………………………………………………………… 914

Резюме………………………………………………………………………………………………………………………………………. 916

Глава 47. Стандарты PSR…………………………………………………………………….. 917

PSR-стандарты…………………………………………………………………………………………………………………………. 917

PSR-1: основной стандарт кодирования……………………………………………………………………………….. 918

PHP-теги……………………………………………………………………………………………………………………………. 919

Кодировка UTF-8……………………………………………………………………………………………………………… 919

Разделение объявлений и выполнения действий…………………………………………………………… 919

Пространство имен………………………………………………………………………………………………………….. 920

Именование классов, методов и констант классов……………………………………………………….. 920

PSR-12. Руководство по стилю кода………………………………………………………………………………………. 921

Соблюдение PSR-1…………………………………………………………………………………………………………… 921

Отступы…………………………………………………………………………………………………………………………….. 921

Файлы……………………………………………………………………………………………………………………………….. 922

Строки……………………………………………………………………………………………………………………………….. 922

Ключевые слова……………………………………………………………………………………………………………….. 922

Пространства имен………………………………………………………………………………………………………….. 922

Классы………………………………………………………………………………………………………………………………. 923

Методы……………………………………………………………………………………………………………………………… 924

Управляющие структуры………………………………………………………………………………………………… 925

Автоматическая проверка стиля…………………………………………………………………………………….. 926

PSR-4: автозагрузка…………………………………………………………………………………………………………………. 927

Резюме………………………………………………………………………………………………………………………………………. 927

Глава 48. Документирование……………………………………………………………….. 928

Установка…………………………………………………………………………………………………………………………………. 928

Документирование PHP-элементов………………………………………………………………………………………… 928

Теги                                                                                                                                                                 930

Резюме………………………………………………………………………………………………………………………………………. 933

Глава 49. Атрибуты……………………………………………………………………………… 934

Синтаксис…………………………………………………………………………………………………………………………………. 935

Отражения для работы атрибутами………………………………………………………………………………………. 937

Класс атрибута………………………………………………………………………………………………………………………… 938

Аргументы атрибутов……………………………………………………………………………………………………………… 940

Резюме………………………………………………………………………………………………………………………………………. 942

Глава 50. Разработка собственного компонента…………………………………… 943

Имя компонента и пространство имен…………………………………………………………………………………… 943

Организация компонента………………………………………………………………………………………………………… 944

Реализация компонента…………………………………………………………………………………………………………… 947

Базовый класс навигации Pager……………………………………………………………………………………… 948

Постраничная навигация по содержимому папки………………………………………………………… 951

Базовый класс представления View……………………………………………………………………………….. 954

Представление: список страниц……………………………………………………………………………………… 955

Собираем все вместе………………………………………………………………………………………………………… 957

Постраничная навигация по содержимому файла……………………………………………………….. 958

Постраничная навигация по содержимому базы данных……………………………………………. 962

Представление: диапазон элементов……………………………………………………………………………… 966

Публикация компонента…………………………………………………………………………………………………………. 970

Зачем разрабатывать собственные компоненты?………………………………………………………………… 972

Резюме………………………………………………………………………………………………………………………………………. 972

Заключение………………………………………………………………………………………….. 973

Приложение. Описание электронного архива………………………………………. 975

Предметный указатель…………………………………………………………………………. 976

Опубликовано

Талисман PHP своими руками

elePHPant Origami

Немного истории

В 1998 году один из создателей языка PHP, Франсуа Бюффьер обратился к своему другу, французскому дизайнеру Винсенту Понтье (Vincent PONTIER) с просьбой разработать логотип для нового языка программирования.

Винсент создал логотип и во время работы обратил внимание, что заглавные буквы немного напоминают по форме слона.

По воле случая один из друзей дизайнера —  Жан-Пьер Дезелю — коллекционировал игрушечных слонов и вел сайт, посвященный PHP. Когда он узнал о дизайнерских наблюдениях друга, то попросил нарисовать ему такого слона. Изображение получило название elePHPant, как игра слов “elephant” и “PHP”.

Первые плюшевые игрушки в виде слона с символикой “PHP” появились только спустя 10 лет после создания рисунка elePHPant. Первоначально талисман был синего цвета, но в последние годы появились  розовые, желтые, красные, фиолетовые и оранжевые слоны.

Делай раз, делай два… делай тридцать семь

Вы можете самостоятельно за 7 минут изготовить из бумаги слоника elePHPant.

Для этого:

  1. Cкачайте выкройку оригами с сайта Винсента Понтье (elephpant.com)
  2. Распечатайте выкройку на принтере (лучше цветном). Как вариант, можно напечатать на ч/б принтере на цветной бумаге.
  3. Следуйте пошаговой инструкции по сборке.
elePHPant-Origami-php-diagramme

РЕКОМЕНДУЕМ КНИГИ ПО PHP