Дмитрий Котеров, Игорь Симдянов. PHP 8. В подлиннике
Раздел Issues
- Для кого написана эта книга?
- Исходные коды
- Четвертое издание
- Общая структура книги
- Листинги
- Предметный указатель
- Благодарности от Дмитрия Котерова
- Благодарности от Игоря Симдянова
- Протоколы передачи данных
- Семейство TCP/IP
- Протокол IP
- Версии протокола IP
- Доменное имя
- Порт
- Резюме
- Зачем нужен протокол HTTP?
- Ресурсы
- Параметры URL
- Методы
- HTTP-сообщения
- HTTP-заголовки
- Content-Type
- Host
- User-Agent
- Referer
- Content-length
- Cookie
- Accept
- HTTP-коды ответов
- Утилита curl
- Резюме
- Установка PHP в Windows
- Переменная окружения PATH
- Установка PHP в macos
- Установка PHP в Linux (Ubuntu)
- Проверочный скрипт
- Ошибки в скриптах
- Запуск встроенного сервера
- Файл hosts
- Вещание вовне
- Конфигурирование PHP
- Интерактивный PHP
- Документация
- Проверка стиля кода
- Docker
- Резюме
- Что умеет PHP?
- Веб-программирование до PHP
- История PHP
- Что нового в PHP 8?
- Нововведения PHP 7.1
- Нововведения PHP 7.2
- Нововведения PHP 7.3
- Нововведения PHP 7.4
- Нововведения PHP 8.0
- Нововведения PHP 8.1
- Пример PHP-программы
- Начальные и конечные теги
- Использование точки с запятой
- Фигурные скобки
- Комментарии
- Включение PHP-файла
- Элементы языка
- Резюме
- Переменные
- Типы переменных
- Целые числа:
integer
- Вещественные числа:
double
- Логический тип:
boolean
- Строки:
string
- Кавычки
- Оператор <<<
- Устройство строки
- Массивы:
array
- Объект:
object
- Ресурс:
resource
- Специальный тип
null
- Действия с переменными
- Присвоение значения
- Уничтожение
- Проверка существования
- Определение типа переменной
- Некоторые условные обозначения
- Неявное приведение типа
- Явное приведение типа
- Ссылочные переменные
- Жесткие ссылки
- «Сбор мусора»
- Символические ссылки
- Ссылки на объекты
- Отладочные функции
- Резюме
- Объектно-ориентированное программирование
- Коды
- Ассемблер
- Язык высокого уровня
- Специализированный язык программирования
- Объектно-ориентированные языки программирования
- Зачем нужны классы?
- Использование готовых классов
- Создание классов
- Разделение классов и остального кода
- Создание объекта
- Область видимости переменных класса
- Типы переменных класса
- Спецификаторы доступа
- Свойства «только для чтения»
- Дамп объекта
- Статические переменные класса
- Ссылки на переменные
- Клонирование объектов
- Резюме
- Предопределенные константы
- Создание константы
- Проверка существования константы
- Константы с динамическими именами
- Абсолютный и относительный пути к файлу
- Константы класса
- Резюме
- Оператор «точка с запятой»
- Оператор «точка»
- Оператор «запятая»
- Арифметические операторы
- Битовые операторы
- Операторы сравнения
- Особенности операторов == и !=
- Сравнение вещественных чисел
- Сравнение строк
- Сравнение составных переменных
- Оператор эквивалентности
- Приоритет операторов
- Резюме
- Зачем в программе нужно ветвление?
- Конструкция if
- Логические операторы
- Логическое И: оператор &&
- Логическое ИЛИ: оператор ||
- Логическое отрицание: оператор !
- Условный оператор x ? y : z
- Оператор ??
- Конструкция switch
- Конструкция match
- Конструкция goto
- Резюме
- Зачем нужны циклы?
- Способы организации циклов в PHP
- Цикл while
- Вложенные циклы
- Досрочное прекращение циклов
- Цикл do ... while
- Цикл for
- Резюме
- Создание массива
- Ассоциативные и индексные массивы
- Многомерные массивы
- Интерполяция элементов массива в строки
- Конструкция list()
- Обход массива
- Цикл foreach
- Сечения массива
- Слияние массивов
- Сравнение массивов
- Проверка существования элементов массива
- Строки как массивы
- Количество элементов в массиве
- Сумма элементов массива
- Случайный элемент массива
- Сортировка массива
- Добавление/удаление элементов
- Работа с ключами массива
- Резюме
- Зачем нужны функции?
- Создание функции
- Ключевое слово return
- Объявление и вызов функции
- Параметры и аргументы
- Параметры по умолчанию
- Переменное число параметров
- Именованные аргументы
- Типы аргументов и возвращаемого значения
- Передача параметров по ссылке
- Локальные переменные
- Глобальные переменные
- Массив $GLOBALS
- Как работает инструкция global?
- Статические переменные
- Резюме
- Рекурсивные функции
- Вложенные функции
- Переменные функции
- Функции обратного вызова
- Анонимные функции
- Замыкания
- Стрелочные функции
- Резюме
- Создание метода
- Обращение к методам объекта
- Проверка существования метода
- Специальные методы
- Конструктор __construct()
- Параметры конструктора
- Деструктор __destruct()
- Методы-аксессоры
- Статические методы
- Класс — self, объект — $this
- Динамические методы
- Интерполяция объекта
- Тип callable
- Оператор ?->
- Резюме
- Отложенные вычисления
- Манипуляция массивами
- Делегирование генераторов
- Экономия ресурсов
- Использование ключей
- Использование ссылки
- Связь генераторов c объектами
- Резюме
- Кодировки
- Строки как массивы
- UTF-8: расширение mbstring
- Поиск в строке
- Отрезание пробелов
- Замена в тексте
- Установка локали (локальных настроек)
- Работа с HTML-кодом
- Функции форматных преобразований
- Объединение и разбиение строк
- Сериализация объектов и массивов
- JSON-формат
- Резюме
- Зачем нужен HTML?
- HTML-код страницы
- Устройство HTML-страницы
- Параграф: тег <p>
- Гиперссылки: тег <a>
- Комментарии
- Заголовки: теги <h1>...<h6>
- Блоки: тег <div>
- Списки: теги <ul>, <ol> и <li>
- HTML на уровне текста
- Изображения: тег <img>
- Каскадные таблицы стилей
- Резюме
- Передача параметров методом GET
- HTML-форма и ее обработчик
- Текстовое поле
- Поле для приема пароля
- Текстовая область
- Скрытое поле
- Флажок
- Список
- Переключатель
- Переадресация
- Резюме
- Multipart-формы
- Тег выбора файла
- Закачка файлов и безопасность
- Поддержка закачки в PHP
- Простые имена полей закачки
- Получение закачанного файла
- Пример: фотоальбом
- Сложные имена полей
- Резюме
- Типы суперглобальных массивов
- Cookie
- Сессии
- Переменные окружения
- Массив
$_SERVER
- Элемент
$_SERVER['DOCUMENT_ROOT']
- Элемент
$_SERVER['HTTP_ACCEPT']
- Элемент
$_SERVER['HTTP_HOST']
- Элемент
$_SERVER['HTTP_REFERER']
- Элемент
$_SERVER['HTTP_USER_AGENT']
- Элемент
$_SERVER['REMOTE_ADDR']
- Элемент
$_SERVER['SERVER_NAME']
- Элемент
$_SERVER['REQUEST_METHOD']
- Элемент
$_SERVER['QUERY_STRING']
- Элемент
$_SERVER['PHP_SELF']
- Элемент
$_SERVER['REQUEST_URI']
- Элемент
- Резюме
- Фильтрация или проверка?
- Проверка данных
- Фильтры проверки
- Значения по умолчанию
- Фильтры очистки
- Пользовательская фильтрация данных
- Фильтрация внешних данных
- Конфигурационный файл php.ini
- Резюме
- Встроенные константы
- Функции округления
- Функция abs()
- Функция round()
- Функция ceil()
- Функция floor()
- Случайные числа
- Функция rand()
- Функция getrandmax()
- Функция random_int()
- Перевод в различные системы счисления
- Функция base_convert()
- Функции bindec(), hexdec() и octdec()
- Функции decbin(), decoct() и dechex()
- Минимум и максимум
- Функция min()
- Функция max()
- Не-числа
- Функция is_nan()
- Функция is_infinite()
- Степенные функции
- Функция sqrt()
- Функция log()
- Функция exp()
- Функция pow()
- Тригонометрия
- Резюме
- О текстовых и бинарных файлах
- Открытие файла
- Различия текстового и бинарного режимов
- Сетевые соединения
- Прямые и обратные слеши
- Безымянные временные файлы
- Закрытие файла
- Чтение и запись
- Блочные чтение/запись
- Построчные чтение/запись
- Чтение CSV-файла
- Положение указателя текущей позиции
- Работа с путями
- Манипулирование целыми файлами
- Чтение и запись целого файла
- Чтение INI-файла
- Другие функции
- Блокирование файла
- Рекомендательная и жесткая блокировки
- Функция flock()
- Типы блокировок
- Блокировки с запретом «подвисания»
- Пример счетчика
- Резюме
- Текущий каталог
- Создание каталога
- Работа с записями
- Рекурсивный обход каталога
- Фильтрация содержимого каталога
- Удаление каталога
- Класс Directory
- Резюме
- Идентификатор пользователя
- Идентификатор группы
- Владелец файла
- Права доступа
- Числовое представление прав доступа
- Особенности каталогов
- Примеры
- Функции PHP
- Назначение прав доступа
- Определение атрибутов файла
- Определение возможности доступа
- Ссылки
- Символические ссылки
- Жесткие ссылки
- Резюме
- Запуск утилит
- Оператор «обратные кавычки»
- Экранирование командной строки
- Каналы
- Временные файлы
- Открытие канала
- Взаимная блокировка (deadlock)
- Резюме
- Представление времени в формате timestamp
- Вычисление времени работы скрипта
- Большие вещественные числа
- Построение строкового представления даты
- Построение timestamp
- Разбор timestamp
- Календарик
- Географическая привязка
- Хранение абсолютного времени
- Перевод времени
- Окончательное решение задачи
- Календарные классы PHP
- Класс DateTime
- Класс DateTimeZone
- Класс DateInterval
- Класс DatePeriod
- Начнем с примеров
- Пример первый
- Пример второй
- Пример третий
- Пример четвертый
- Что такое регулярные выражения?
- Терминология
- Использование регулярных выражений в PHP
- Сопоставление
- Сопоставление с заменой
- Язык регулярных выражений
- Ограничители
- Простые символы
- Квантификаторы повторений
- Мнимые символы
- Оператор альтернативы
- Группирующие скобки
- «Карманы»
- «Жадность» квантификаторов
- Модификаторы
- Незахватывающий поиск
- Другие возможности регулярных выражений
- Функции PHP
- Поиск совпадений
- Замена совпадений
- Разбиение по регулярному выражению
- Экранирование символов
- Фильтрация массива
- Примеры регулярных выражений
- Преобразование адресов e-mail
- Преобразование гиперссылок
- Быть или не быть?
- Ссылки
- Резюме
- Информационные функции
- Принудительное завершение программы
- Генерация кода во время выполнения
- Функции хеширования
- Подсветка PHP-кода
- Резюме
- Расширение класса
- Метод включения
- Наследование
- Переопределение методов
- Константы
__CLASS__
и__METHOD__
- Позднее статическое связывание
- Анонимные классы
- Полиморфизм
- Абстрагирование
- Виртуальные методы
- Расширение иерархии
- Абстрактные классы и методы
- Совместимость родственных типов
- Уточнение типа в функциях
- Оператор instanceof
- Обратное преобразование типа
- Резюме
- Ограничения наследования
- Создание интерфейса
- Наследование интерфейсов
- Реализация нескольких интерфейсов
- Реализует ли объект интерфейс?
- Резюме
- Создание трейта
- Трейты и наследование
- Разрешение конфликтов
- Вложенные трейты
- Резюме
- Создание перечисления
- Типизированные перечисления
- Сравнение значений
- Перечисления как классы
- Ограничения перечислений
- Методы перечислений
- Использование трейтов
- Константы
- Резюме
- Базовый синтаксис
- Конструкция throw
- Раскрутка стека
- Исключения и деструкторы
- Интерфейс класса Exception
- Генерация исключений в классах
- Создание собственных исключений
- Перехват собственных исключений
- Повторная генерация исключений
- Блок finally
- Использование интерфейсов
- Резюме
- Что такое ошибка?
- Роли ошибок
- Виды ошибок
- Ошибки и исключения
- Контроль ошибок
- Директивы контроля ошибок
- Установка режима вывода ошибок
- Оператор отключения ошибок
- Перехват ошибок
- Генерация ошибок
- Стек вызовов функций
- Резюме
- Проблема именования
- Объявление пространства имен
- Иерархия пространства имен
- Текущее пространство имен
- Импортирование
- Автозагрузка классов
- Функция
spl_autoload_register()
- Функция
- Резюме
- Зачем нужны шаблоны проектирования?
- Одиночка (Singleton)
- Фабричный метод (Factory Method)
- Модель-Представление-Контроллер
- Резюме
- Стандартное поведение foreach
- Интерфейсы для создания итераторов
- Интерфейс Iterator
- Интерфейс IteratorAggregate
- Пример собственного итератора
- Как PHP обрабатывает итераторы?
- Множественные итераторы
- Виртуальные массивы
- Библиотека SPL
- Класс ArrayObject
- Класс DirectoryIterator
- Класс FilterIterator
- Класс LimitIterator
- Рекурсивные итераторы
- Резюме
- Механизм отражений
- Отражение функции: ReflectionFunction
- Отражение параметра функции: ReflectionParameter
- Отражение класса: ReflectionClass
- Пояснение: отражения и наследование
- Отражение свойства класса: ReflectionProperty
- Отражение метода класса: ReflectionMethod
- Отражение библиотеки расширения: ReflectionExtension
- Полезное добавление: класс Reflection
- Обработка исключений: ReflectionException
- Иерархия
- Резюме
- Подключение расширений
- Конфигурационный файл php.ini
- Структура php.ini
- Параметры языка PHP
- Ограничение ресурсов
- Загрузка файлов
- Обзор расширений
- Резюме
- Что такое база данных?
- Неудобство работы с файлами
- Почему PostgreSQL?
- Установка PostgreSQL
- Установка в Windows
- Установка в macos
- Установка в Linux Ubuntu
- Администрирование базы данных
- Введение в СУБД и SQL
- Первичные ключи
- Управление базами данных
- Управление таблицами
- Комментарии в SQL
- Вставка записей в таблицу
- Удаление записей
- Обновление записей
- Выборка данных
- Резюме
- Настройка PDO
- Установка соединения с базой данных
- Выполнение SQL-запросов
- Обработка ошибок
- Извлечение данных
- Параметризация SQL-запросов
- Заполнение связанных таблиц
- Резюме
- Универсальная функция
getimagesize()
- Работа с изображениями и библиотека GD
- Пример создания изображения
- Создание изображения
- Загрузка изображения
- Определение параметров изображения
- Сохранение изображения
- Преобразование изображения в палитровое
- Работа с цветом в формате RGB
- Создание нового цвета
- Текстовое представление цвета
- Получение ближайшего в палитре цвета
- Эффект прозрачности
- Получение RGB-составляющих
- Использование полупрозрачных цветов
- Графические примитивы
- Копирование изображений
- Прямоугольники
- Выбор пера
- Линии
- Дуга сектора
- Закраска произвольной области
- Закраска текстурой
- Многоугольники
- Работа с пикселами
- Работа с фиксированными шрифтами
- Загрузка шрифта
- Параметры шрифта
- Вывод строки
- Работа со шрифтами TrueType
- Вывод строки
- Проблемы с русскими буквами
- Определение границ строки
- Коррекция функции
imageTtfBBox()
- Пример
- Резюме
- Файловые функции и потоки
- Другие схемы
- Контекст потока
- Работа с сокетами
- «Эмуляция» браузера
- Неблокирующее чтение
- Функции для работы с DNS
- Расширение CURL
- Отправка данных методом POST
- Передача пользовательского агента
- Резюме
- Почему Redis?
- Установка сервера Redis
- В среде Linux Ubuntu
- В среде macos
- В среде Windows
- Проверка работоспособности
- Клиент redis-cli
- Вставка и получение значений
- Обновление и удаление значений
- Управление ключами
- Время жизни ключа
- Типы данных
- Хеш
- Множество
- Отсортированное множество
- Базы данных
- Производительность Redis
- PHP-расширение Redis
- Установка расширения php-redis
- Хранение сессий в Redis
- Методы для обслуживания данных в Redis
- Кеширование данных
- Резюме
- Composer: управление компонентами
- Установка Composer
- Установка в Windows
- Установка в macos
- Установка в Linux Ubuntu
- Где искать компоненты?
- Установка компонента
- Использование компонента
- Полезные компоненты
- Компонент psySH: интерактивный отладчик
- Компонент phinx: миграции
- Резюме
- PSR-стандарты
- PSR-1: основной стандарт кодирования
- PHP-теги
- Кодировка UTF-8
- Разделение объявлений и выполнения действий
- Пространство имен
- Именование классов, методов и констант классов
- PSR-12. Руководство по стилю кода
- Соблюдение PSR-1
- Отступы
- Файлы
- Строки
- Ключевые слова
- Пространства имен
- Классы
- Методы
- Управляющие структуры
- Автоматическая проверка стиля
- PSR-4: автозагрузка
- Резюме
- Установка
- Документирование PHP-элементов
- Теги
- Резюме
- Синтаксис
- Отражения для работы атрибутами
- Класс атрибута
- Аргументы атрибутов
- Резюме
- Имя компонента и пространство имен
- Организация компонента
- Реализация компонента
- Базовый класс навигации Pager
- Постраничная навигация по содержимому папки
- Базовый класс представления View
- Представление: список страниц
- Собираем все вместе
- Постраничная навигация по содержимому файла
- Постраничная навигация по содержимому базы данных
- Представление: диапазон элементов
- Публикация компонента
- Зачем разрабатывать собственные компоненты?