Введение | 15 |
PHP на предприятии | 15 |
Структура и организация книги | 16 |
Платформы и версии | 20 |
|
Часть I. Методики реализации и разработки | 21 |
|
Глава 1. Стили кодирования | 23 |
Выбор правильного стиля | 24 |
Форматирование и компоновка кода | 24 |
Именование | 32 |
Предотвращение запутанности кода | 39 |
Документация | 41 |
Дополнительная литература | 47 |
|
Глава 2. Объектно-ориентированное программирование |
с использованием типовых проектов | 49 |
Введение в ОО-программирование | 50 |
Краткое введение в типовые проекты | 55 |
Переопределение | 69 |
Дополнительная литература | 82 |
|
Глава 3. Обработка ошибок | 83 |
Обработка ошибок | 85 |
Обработка внешних ошибок | 90 |
Исключения | 92 |
Когда использовать исключения | 112 |
Дополнительная литература | 113 |
|
Глава 4. Реализация средствами PHP: шаблоны и Web | 115 |
Smarty | 116 |
Создание собственного решения на базе шаблонов | 127 |
Дополнительная литература | 129 |
|
Глава 5. Реализация средствами PHP: автономные сценарии | 131 |
Введение в интерфейс командной строки PHP | 132 |
Обработка ввода-вывода (I/O) | 133 |
Разбор аргументов командной строки | 135 |
Создание и управление дочерними процессами | 138 |
Написание демонов | 145 |
Объединение полученных знаний: службы мониторинга | 148 |
Дополнительная литература | 156 |
|
Глава 6. Блочное тестирование | 159 |
Введение в блочное тестирование | 160 |
Написание блочных тестов внутри и вне кода программ | 163 |
Дополнительные функции в PHPUnit | 168 |
Разработка на основе тестов | 174 |
Блочное тестирование в Web-среде | 184 |
Дополнительная литература | 186 |
|
Глава 7. Управление средой разработки | 187 |
Контроль изменений | 188 |
Управление пакетами | 204 |
Дополнительная литература | 210 |
|
Глава 8. Проектирование API-интерфейса | 211 |
Проектирование, обеспечивающее рефакторинг и расширяемость | 212 |
Безопасное программирование | 217 |
Дополнительная литература | 220 |
|
Часть II. Кэширование | 221 |
|
Глава 9. Поверхностная настройка производительности | 223 |
Варианты языковой настройки | 223 |
PHP-приложения с поддержкой кэш-памяти | 234 |
Сжатие содержимого страниц | 239 |
Дополнительная литература | 240 |
|
Глава 10. Кэширование данных | 243 |
Проблемы кэширования | 244 |
Определение кэшируемых компонентов данных | 245 |
Выбор стратегии: созданные вручную, или серийные классы | 246 |
Буферизация вывода | 246 |
Кэширование в памяти | 248 |
DBM-кэширование | 256 |
Кэширование на основе общей памяти | 262 |
Кэширование на основе cookie-файлов | 263 |
Интеграция кэширования в код приложения | 268 |
Дополнительная литература | 284 |
|
Глава 11. Повторное использование вычислений | 285 |
Вводный пример: последовательности Фибоначчи | 285 |
Кэширование повторно используемых данных внутри запроса | 291 |
Кэширование повторно используемых данных между запросами | 293 |
Повторное использование вычислений внутри PHP | 296 |
Дополнительная литература | 298 |
|
Часть III. Распределённые приложения | 299 |
|
Глава 12. Взаимодействие с базами данных | 301 |
Принципы действия баз данных и запросов | 302 |
Модели доступа к базам данных | 308 |
Настройка доступа к базе данных | 318 |
Дополнительная литература | 323 |
|
Глава 13. Аутентификация пользователей и безопасность сеансов | 325 |
Простые схемы аутентификации | 326 |
Регистрация пользователей | 329 |
Поддержка аутентификации: персонификация пользователей | 333 |
Единая регистрация | 341 |
Дополнительная литература | 348 |
|
Глава 14. Поддержка сеансов | 351 |
Клиентские сеансы | 352 |
Серверные сеансы | 356 |
|
Глава 15. Создание распределённой среды | 371 |
Что такое кластер? | 371 |
Основы кластерных конструкций | 374 |
Кэширование в распределённой среде | 380 |
Масштабирование баз данных | 387 |
Дополнительная литература | 395 |
|
Глава 16. RPC: взаимодействие с удалёнными службами | 397 |
XML-RPC | 398 |
SOAP | 406 |
Сравнение SOAP и XML-RPC | 416 |
Дополнительная литература | 416 |
|
Часть IV. Производительность | 419 |
|
Глава 17. Оценка производительности: тестирование |
приложения в целом | 421 |
Пассивный поиск «бутылочных горлышек» | 422 |
Генераторы нагрузки | 424 |
Дополнительная литература | 429 |
|
Глава 18. Профилирование | 431 |
Необходимые свойства PHP-профайлера | 432 |
Многообразие профайлеров | 432 |
Установка и использование APD | 433 |
Пример трассировки | 435 |
Профилирование более крупного приложения | 437 |
Выявление общей неэффективности | 442 |
Удаление излишней функциональности | 444 |
Дополнительная литература | 448 |
|
Глава 19. Сравнительное тестирование производительности: |
оценка блоков кода и функций | 451 |
Основы эталонного тестирования | 453 |
Создание эталонной тестовой нагрузки | 453 |
Примеры эталонных тестов | 464 |
|
Часть V. Расширяемость | 473 |
|
Глава 20. Устройство PHP и Zend Engine | 475 |
Как работает Zend Engine: коды операций и операционные массивы | 476 |
Переменные | 482 |
Функции | 485 |
Классы | 487 |
Жизненный цикл запроса в PHP | 491 |
Дополнительная литература | 500 |
|
Глава 21. Расширение PHP: часть I | 501 |
Основы создания расширений | 502 |
Пример: клиентская оболочка для Spread-службы | 533 |
Дополнительная литература | 543 |
|
Глава 22. Расширение PHP: часть II | 545 |
Реализация классов | 545 |
Написание нестандартных обработчиков сеансов | 559 |
API потоков | 563 |
Дополнительная литература | 573 |
|
Глава 23. Написание SAPI-интерфейсов и расширение Zend Engine | 575 |
SAPI-интерфейсы | 575 |
Модификация и анализ Zend Engine | 591 |
Домашнее задание | 601 |
|
Предметный указатель | 603 |