2010г.
Количество страниц:1104
Рассматриваются основы функционирования Web-серверов, сборка исполняемого модуля PHP в ОС UNIX, инструментарий Web-разработчика (в том числе утилиты отладки сценариев), синтаксис и стандартные функции языка. Приведено описание функций PHP для работы с массивами, файлами, СУБД MySQL, регулярными выражениями формата PCRE, графическими примитивами, почтой, сессиями и т. д. Особое внимание уделено новым возможностям языка по работе с XML-документами, объектно-ориентированному программированию, а также подходам к отделению PHP-кода от HTML-шаблонов сайта.
Во втором издании добавлены главы про технологии AJAX и DbSimple, исправлены замеченные опечатки.
Содержание:
Часть I. Основы Web-программирования 13
Глава 1. Принципы работы Интернета 15
Протоколы передачи данных 15
Семейство TCP/IP 17
Адресация в Сети 18
IP-адрес 18
Доменное имя 19
Порт 21
Установка соединения 22
Обмен данными 23
Терминология 23
Сервер 23
Узел 24
Порт 24
Сетевой демон, сервис, служба 24
Хост 25
Виртуальный хост 25
Провайдер 26
Хостинг-провайдер (хостер) 26
Хостинг 26
Сайт 26
HTML-документ 27
Страница (или HTML-страница) 27
Скрипт, сценарий 27
Web-программирование 27
Взаимосвязь терминов 28
World Wide Web и URL 28
Протокол 29
Имя хоста 29
Порт 29
Путь к странице 29
Резюме 30
Глава 2. Интерфейс CGI и HTTP 31
Что такое CGI? 31
Секреты URL 32
Заголовки запроса и метод GET 33
GET 34
POST 35
Content-Type 35
Host 35
User-Agent 36
Referer 36
Content-length 37
Cookie 37
Accept 37
Эмуляция браузера через telnet 37
Метод POST 38
URL-кодирование 39
Проблема русских кодировок 39
Что такое кодировка символов? 39
"Русский Apache" и кодировка 41
Пример сбойной конфигурации 41
Отключение автоматической перекодировки 42
Что такое формы и для чего они нужны? 42
Передача параметров "вручную" 43
Использование формы 43
Абсолютный и относительный пути к сценарию 45
Метод POST и формы 45
Кодировка входных данных 46
Резюме 47
Глава 3. CGI изнутри 48
Язык C 48
Работа с исходными текстами на C 49
Компиляция программ 49
Передача документа пользователю 50
Заголовки ответа 50
Заголовок кода ответа 50
"Подделывание" заголовка ответа 51
Content-type 51
Pragma 51
Location 52
Set-cookie 52
Date 52
Server 52
Примеры CGI-сценариев на C 53
Вывод бинарного файла 54
Передача информации CGI-сценарию 54
Переменные окружения 54
Передача параметров методом GET 56
Передача параметров методом POST 57
Расшифровка URL-кодированных данных 58
Формы 61
Различные поля ввода 62
Текстовое поле (text) 62
Поле ввода пароля (password) 63
Скрытое текстовое поле (hidden) 63
Независимый переключатель (checkbox) 64
Зависимый переключатель (radio) 65
Кнопка отправки формы (submit) 65
Кнопка сброса формы (reset) 66
Рисунок для отправки формы (image) 66
Тег- многострочное поле ввода текста 66
Тег — список 67
Списки множественного выбора (multiple) 67
HTML-сущности 68
Загрузка файлов 69
Формат данных 69
Тег загрузки файла (file) 71
Что такое cookies и "с чем их едят"? 72
Установка cookie 74
Получение cookies из браузера 75
Пример программы для работы с cookies 76
Авторизация 77
Резюме 78
Часть II. Выбор и настройка инструментария 79
Глава 4. Установка Apache 81
Традиционный процесс отладки сайта 81
Локальный сервер 82
Почему Apache? 82
От слов к делу: установка Apache 83
Получение дистрибутива 83
Получение документации 83
Создание виртуального диска 84
Установка Apache 85
Настройка файла конфигурации Apache 86
Запуск и остановка 89
Тестирование и устранение неполадок 90
Дополнительные драйверы для Windows 95 90
Устранение неполадок 90
Проверка HTML-страниц 91
Проверка SSI 91
Виртуальные хосты Apache 92
Разновидности виртуальных хостов 92
Именование виртуальных хостов 92
Параметры хостов 92
Что получилось в итоге? 96
Apache для Windows и безопасность 96
Службы 97
Безопасность 97
Пример уязвимого скрипта 98
Заключительные слова о безопасности 99
Ссылки 100
Резюме 100
Глава 5. Установка PHP и MySQL 101
Установка PHP 101
Дополнительные драйверы для Windows 98 102
Получение документации 102
Состав дистрибутива PHP 103
CGI-версия PHP 103
Консольная версия PHP 103
"Бесконсольная" версия 104
Динамическая библиотека Apache 104
Файл конфигурации php.ini-dist 104
Библиотеки расширения 104
Другие файлы 105
Конфигурирование PHP 105
Конфигурирование расширений 106
Настройка Apache для работы с PHP 107
Установка PHP в виде CGI-программы 108
Установка PHP в виде модуля сервера 108
Тестирование PHP 111
Проверка конфигурации 112
Установка MySQL 112
Получение дистрибутива 112
Получение документации 113
Конфигурирование MySQL 113
Настройка параметров сервера 113
Запуск и остановка 115
Тестирование MySQL 116
Отладка и устранение ошибок 117
Отключение межсетевого экрана (firewall) 117
Просмотр истории обращения к файлам 117
Просмотр заголовков HTTP 118
Работа с интерактивным отладчиком PHPEd 120
Традиционная отладка PHP-сценариев 120
Интерактивный отладчик 121
Отладчик PHPEd 122
Настройка PHPEd 122
Ядро отладчика 123
"Слушатель" отладчика 123
Интерактивная оболочка отладчика 125
Тестирование PHPEd 127
Ссылки 128
Резюме 129
Глава 6. Денвер: автоматизация установки инструментария 130
Что такое Денвер? 130
Условия использования 131
Что входит в Денвер? 131
Состав базового пакета 131
Дополнительные пакеты расширения 131
Поддержка разработчиков 132
Установка дистрибутива 132
Подготовка к работе с сетью 132
Пользователю Windows 95 133
Инсталляция 134
Работа с виртуальными хостами 136
Проблемы с контроллером удаленного доступа 138
Проблемы с прокси-сервером 139
Вопросы и ответы 139
Ссылки 140
Резюме 140
Глава 7. Установка PHP 5 в ОС Unix 141
PHP 5 как CGI-приложение 141
Загрузка дистрибутивов 142
Работа с Midnight Commander 142
Компиляция программ 143
Распаковка дистрибутивов 143
Компиляция библиотеки libxml2 144
Компиляция библиотеки libxslt 145
Компиляция PHP 5 145
Компиляция дополнительных модулей 146
Подключение PHP на машине хостинг-провайдера 146
Сборка PHP в виде модуля Apache 147
Сводка команд Unix 147
Ссылки 149
Резюме 149
Часть III. Основы языка PHP 151
Глава 8. Характеристика языка PHP 153
Интерпретатор или компилятор? 154
Основные термины 154
Как работает PHP 155
Достоинства и недостатки интерпретатора 156
PHP и СУБД 157
Интерпретатор и компилятор 158
PHP версии 5 158
Пример PHP-программы 159
Использование PHP в Web 163
Резюме 164
Глава 9. Переменные, константы, типы данных 165
Переменные 165
Копирование переменных 166
Типы переменных 166
integer (целое число) 166
double (вещественное число) 166
string (строка текста) 167
array (ассоциативный массив) 167
object (ссылка на объект) 167
resource (ресурс) 167
boolean (логический тип) 168
NULL (специальное значение) 168
Действия с переменными 168
Присвоение значения 168
Проверка существования 169
Уничтожение 169
Определение типа переменной 170
Установка типа переменной 171
Оператор присваивания 171
Ссылочные переменные 172
Жесткие ссылки 172
"Сбор мусора" 173
Символические ссылки 173
Ссылки на объекты 174
Некоторые условные обозначения 175
Константы 177
Предопределенные константы 177
Определение констант 178
Проверка существования константы 178
Отладочные функции 179
Резюме 181
Глава 10. Выражения и операции PHP 182
Выражения 182
Логические выражения 183
Строковые выражения 184
Строка в апострофах 184
Строка в кавычках 184
Here-документ 186
Вызов внешней программы 186
Операции 187
Арифметические операции 187
Строковые операции 187
Операции присваивания 188
Операции инкремента и декремента 188
Битовые операции 189
Операции сравнения 189
Особенности операторов == и != 189
Сравнение сложных переменных 190
Операция эквивалентности 191
Логические операции 193
Операция отключения предупреждений 193
Особенности оператора @ 195
Противопоказания к использованию 195
Резюме 196
Глава 11. Работа с данными формы 197
Передача данных командной строки 197
Формы 199
Трансляция полей формы 200
Трансляция переменных окружения 202
Трансляция cookies 202
Обработка списков 203
Обработка массивов 204
Диагностика 205
Режим register_globals 205
Первый пример уязвимости 206
Второй пример уязвимости 206
Порядок трансляции переменных 207
Особенности флажков checkbox 208
Резюме 209
Глава 12. Конструкции языка 210
Инструкция if-else 210
Использование альтернативного синтаксиса 211
Цикл с предусловием while 212
Цикл с постусловием do-while 212
Универсальный цикл for 213
Инструкции break и continue 214
Нетрадиционное использование do-while и break 215
Цикл foreach 216
Конструкция switch-case 217
Инструкции require и include 218
Инструкции однократного включения 219
Суть проблемы 219
Решение: require_once 221
Другие инструкции 221
Резюме 222
Глава 13. Ассоциативные массивы 223
Создание массива "на лету". Автомассивы 224
Оператор list() 225
Списки и ассоциативные массивы: путаница?.. 226
Оператор array() и многомерные массивы 226
Операции над массивами 227
Доступ по ключу 228
Функция count() 228
Слияние массивов 228
Слияние списков 229
Обновление элементов 229
Косвенный перебор элементов массива 230
Перебор списка 230
Перебор ассоциативного массива 231
Недостатки косвенного перебора 231
Прямой перебор массива 232
Старый способ перебора 232
Перебор в стиле PHP 4 233
Ссылочный синтаксис foreach 233
Списки и строки 234
Сериализация 235
Упаковка 236
Распаковка 236
Резюме 236
Глава 14. Функции и области видимости 237
Пример функции 238
Общий синтаксис определения функции 239
Инструкция return 239
Объявление и вызов функции 240
Параметры по умолчанию 241
Передача параметров по ссылке 241
Переменное число параметров 243
Локальные переменные 245
Глобальные переменные 245
Массив $GLOBALS 246
Самовложенность 247
Как работает инструкция global 247
Статические переменные 248
Рекурсия 249
Факториал 249
Пример функции: dumper() 250
Вложенные функции 251
Условно определяемые функции 252
Эмуляция функции virtual() 253
Передача функций "по ссылке" 254
Использование call_user_func() 255
Использование call_user_func_array() 255
Возврат функцией ссылки 256
Технология отложенного копирования 257
Несколько советов по использованию функций 259
Резюме 260
Часть IV. Стандартные функции PHP 261
Глава 15. Строковые функции 263
Конкатенация строк 263
О сравнении строк 264
Особенности strpos() 265
Работа с одиночными символами 266
Отрезание пробелов 267
Базовые функции 268
Работа с подстроками 269
Замена 270
Подстановка 271
Преобразования символов 273
Изменение регистра 275
Установка локали (локальных настроек) 276
Преобразование кодировок 277
Функции форматных преобразований 278
Форматирование текста 280
Работа с бинарными данными 281
Хэш-функции 283
Сброс буфера вывода 285
Резюме 285
Глава 16. Работа с массивами 286
Лексикографическая и числовая сортировки 286
Сортировка произвольных массивов 287
Сортировка по значениям 287
Сортировка по ключам 287
Пользовательская сортировка по ключам 288
Пользовательская сортировка по значениям 289
Переворачивание массива 289
"Естественная" сортировка 290
Сортировка списков 291
Сортировка списка 291
Пользовательская сортировка списка 292
Перемешивание списка 292
Ключи и значения 293
Слияние массивов 294
Работа с подмассивами 294
Работа со стеком и очередью 295
Переменные и массивы 296
Применение в шаблонах 298
Создание диапазона чисел 299
Работа с множествами 299
Пересечение 299
Разность 300
Объединение 300
Резюме 301
Глава 17. Математические функции 302
Встроенные константы 302
Функции округления 303
Случайные числа 303
Перевод в различные системы счисления 306
Минимум и максимум 307
Не-числа 307
Степенные функции 308
Тригонометрия 308
Резюме 309
Глава 18. Работа с файлами 310
О текстовых и бинарных файлах 310
Открытие файла 311
Конструкция or die() 313
Различия текстового и бинарного режимов 313
Сетевые соединения 314
Прямые и обратные слэши 314
Безымянные временные файлы 315
Закрытие файла 316
Чтение и запись 316
Блочные чтение/запись 317
Построчные чтение/запись 317
Чтение CSV-файла 318
Проблемы стандартной функции fgetcsv() 319
Положение указателя текущей позиции 319
Работа с путями 320
Манипулирование целыми файлами 322
Чтение и запись целого файла 323
Чтение INI-файла 324
Другие функции 325
Блокирование файла 326
Рекомендательная и жесткая блокировки 326
Функция flock() 327
Типы блокировок 327
Исключительная блокировка 327
Разделяемая блокировка 331
Блокировки с запретом "подвисания" 332
Пример счетчика 333
Резюме 334
Глава 19. Права доступа и атрибуты файлов 335
Идентификатор пользователя 335
Идентификатор группы 336
Владелец файла 337
Права доступа 337
Числовое представление прав доступа 338
Особенности каталогов 339
Примеры 340
Домашний каталог пользователя 340
Защищенный от записи файл 340
CGI-скрипт 341
Системные утилиты 341
Закрытые системные файлы 341
Права доступа на PHP-сценарии 341
Функции PHP 342
Права доступа 342
Определение атрибутов файла 343
Специальные функции 344
Определение типа файла 345
Определение возможности доступа 345
Ссылки 346
Символические ссылки 346
Жесткие ссылки 347
Резюме 348
Глава 20. Работа с каталогами 349
Манипулирование каталогами 349
Работа с записями 350
Пример: печать дерева каталогов 351
Получение содержимого каталога 352
Резюме 353
Глава 21. Запуск внешних программ 354
Запуск утилит 354
Оператор "обратные апострофы" 356
Экранирование командной строки 356
Режим safe_mode 357
Каналы 358
Временные файлы 359
Открытие канала 359
Взаимная блокировка (deadlock) 360
Резюме 361
Глава 22. Работа с датами и временем 362
Представление времени в формате timestamp 362
Вычисление времени работы скрипта 363
Большие вещественные числа 363
Построение строкового представления даты 364
Построение timestamp 366
Разбор timestamp 368
Григорианский календарь 368
Проверка даты 369
Календарик 370
Дата и время по Гринвичу 372
Время по GMT 372
Хранение абсолютного времени 372
Перевод времени 373
Окончательное решение задачи 374
Резюме 375
Глава 23. Управление интерпретатором 376
Информационные функции 376
Настройка параметров PHP 377
PHP в виде модуля Apache 378
CGI-версия PHP 378
Создание переадресации для интерпретатора PHP 379
Переадресация в Unix 380
Использование функции ini_set() 381
Некоторые популярные директивы 381
Контроль ошибок 386
Директивы контроля ошибок 386
Установка режима вывода ошибок 387
Оператор отключения ошибок 388
Пример использования оператора @ 389
Предостережения 389
Перехват ошибок 390
Проблемы с оператором @ 392
Генерация ошибок 393
Стек вызовов функций 393
Принудительное завершение программы 394
Финализаторы 395
Генерация кода во время выполнения 396
Выполнение кода 396
Генерация функций 398
Другие функции 400
Резюме 400
Глава 24. Основы регулярных выражений в формате PCRE 401
Начнем с примеров 401
Пример первый 401
Пример второй 402
Пример третий 402
Пример четвертый 403
What is the PCRE? 404
Терминология 404
Языки регулярных выражений 405
Использование регулярных выражений в PHP 406
Сопоставление 406
Сопоставление с заменой 407
Язык PCRE 408
Ограничители 408
Альтернативные ограничители 409
Отмена действия спецсимволов 409
Простые символы (литералы) 410
Классы символов 411
Альтернативы 411
Отрицательные классы 412
Квантификаторы повторений 413
Ноль или более совпадений 413
Одно или более совпадений 413
Ноль или одно совпадение 414
Заданное число совпадений 414
Мнимые символы 414
Оператор альтернативы 415
Группирующие скобки 415
"Карманы" 416
Использование карманов в функции замены 417
Использование карманов в функции сопоставления 418
"Жадность" квантификаторов 419
Рекуррентные структуры 420
Группировка без захвата 421
Модификаторы 421
Модификатор /i: игнорирование регистра 421
Модификатор /x: пропуск пробелов и комментариев 422
Модификатор /m: многострочность 422
Модификатор /s: (однострочный поиск) 423
Модификатор /e: выполнение PHP-программы при замене 423
Незахватывающий поиск 424
Позитивный просмотр вперед 424
Негативный просмотр вперед 425
Позитивный просмотр назад 425
Негативный просмотр назад 426
Другие возможности PCRE 426
Функции PHP 426
Поиск совпадений 426
Замена совпадений 429
Разбиение по регулярному выражению 431
Выделение всех уникальных слов из текста 431
Экранирование символов 432
Фильтрация массива 433
Примеры использования регулярных выражений 434
Преобразование адресов e-mail 434
Преобразование гиперссылок 435
Быть или не быть? 436
Ссылки 436
Резюме 436
Глава 25. Работа с HTTP и WWW 437
Заголовки ответа 437
Вывод заголовка ответа 437
Проблемы с заголовками 437
Запрет кэширования 438
Получение выведенных заголовков 439
Получение заголовков запроса 440
Работа с cookies 440
Немного теории 440
Установка cookie 441
Массивы и cookie 442
Получение cookie 443
SSI и функция virtual() 443
Эмуляция функции virtual() 444
Разбор URL 445
Разбиение и "склеивание" QUERY_STRING 445
Разбиение и "склеивание" URL 446
Пример 448
Резюме 449
Глава 26. Сетевые функции 450
Сеть и файловые функции 450
Проблемы безопасности 451
Другие схемы 451
Работа с сокетами 451
"Эмуляция" браузера 452
Неблокирующее чтение 453
Функции для работы с DNS 453
Преобразование IP-адреса в доменное имя и наоборот 454
Получение MX-записи 455
Резюме 457
Глава 27. Посылка писем через PHP 458
Формат электронного письма 458
Отправка письма 459
Почтовые шаблоны 460
Расщепление заголовков 461
Анализ заголовков 462
Русскоязычные кодировки 463
Заголовок Content-type и кодировка 464
Кодировка заголовков 464
Кодирование тела письма 466
Письма с вложениями 467
Динамическая смена кодировки 467
Активные шаблоны 468
Настройки PHP 470
Ссылки 471
Резюме 471
Глава 28. Работа с СУБД MySQL 472
Что такое база данных? 472
Неудобство работы с файлами 473
Архитектура MySQL 474
Администрирование базы данных 475
Порядок работы с базой данных 475
Интерфейсы для работы с MySQL 476
Соединение с сервером 476
Обработка ошибок 477
Выполнение запросов к базе данных 477
Автоматизация подключения к СУБД 478
Создание нового пользователя 480
Подключение с правами администратора 480
Язык запросов СУБД MySQL 480
CREATE DATABASE: создание базы данных 481
CREATE TABLE: создание таблицы 481
Типы полей 482
Модификаторы и флаги типов 485
DROP TABLE: удаление таблицы 485
INSERT: вставка записи в таблицу 486
DELETE: удаление записей 486
SELECT: поиск и выборка записей 486
Получение числа записей, удовлетворяющих выражению 487
Получение уникальных значений столбцов 487
UPDATE: обновление записей 488
Комментарии 488
Получение результата 488
Преобразование result-set в двумерный массив 489
AS: переименование полей 490
Передвижение по результирующему набору 490
LIMIT: ограничение выборки средствами SQL 491
Выборка строки в виде списка 491
Параметры результата 491
Получение отдельной ячейки результата 492
Информация о результате 492
Пример использования функций 493
Информация о таблицах и полях 494
AUTO_INCREMENT: уникальные идентификаторы 495
Плотное следование идентификаторов 496
Получение идентификатора до вставки 497
Индексы и производительность БД 497
Как "работают" индексы 498
Создание индексов 499
EXPLAIN: план выполнения запроса 499
Недостатки индексов 499
MySQL и проблемы безопасности 500
Суть проблемы 500
Экранирование спецсимволов 500
Шаблоны запросов и placeholders 501
Пример: гостевая книга 504
Ссылки 507
Резюме 508
Глава 29. Управление сессиями 509
Что такое сессия? 510
Зачем нужны сессии? 510
Механизм работы сессий 511
Инициализация сессии 512
Пример использования сессии 512
Уничтожение сессии 514
Сессии и cookies 514
Явное использование константы SID 514
Неявное изменение гиперссылок 515
Неявное изменение формы 516
Использовать ли cookies в сессиях? 517
"Лишние" идентификаторы 518
Идентификатор сессии и имя группы 518
Имя группы сессий 518
Идентификатор сессии 519
Путь к временному каталогу 520
Стоит ли изменять группу сессий? 520
Установка обработчиков сессии 521
Обзор обработчиков 521
Регистрация обработчиков 522
Пример: переопределение обработчиков 523
Регистрация глобальных переменных 525
Резюме 526
Глава 30. Работа с изображениями 527
Библиотека GD и формат GIF 528
Универсальная функция getimagesize() 528
Работа с изображениями и библиотека GD 530
Пример создания изображения 530
Создание изображения 531
Загрузка изображения 532
Определение параметров изображения 532
Сохранение изображения 533
Преобразование изображения в палитровое 534
Работа с цветом в формате RGB 534
Создание нового цвета 535
Текстовое представление цвета 535
Получение ближайшего в палитре цвета 535
Эффект прозрачности 536
Получение RGB-составляющих 537
Использование полупрозрачных цветов 537
Графические примитивы 538
Копирование изображений 538
Прямоугольники 540
Выбор пера 540
Линии 541
Дуга сектора 541
Закраска произвольной области 542
Закраска текстурой 542
Многоугольники 542
Работа с пикселами 543
Работа с фиксированными шрифтами 544
Загрузка шрифта 544
Параметры шрифта 545
Вывод строки 545
Работа со шрифтами TrueType 545
Вывод строки 546
Проблемы с русскими буквами 546
Определение границ строки 547
Коррекция функции imageTtfBBox() 547
Пример 549
Ссылки 551
Резюме 551
Часть V. Объектно-ориентированное программирование на PHP 553
Глава 31. Организация библиотек 555
Подключение файла библиотеки 556
Корневой каталог библиотек 556
Несколько путей поиска 557
Файл конфигурации 558
Преимущества использования путей подключения 558
Разрешение конфликтов имен 559
Проблема именования функций 559
Пространства имен 560
Соглашения PEAR 561
Соглашение 1: классы вместо пространств имен 561
Функции библиотеки 562
Переменные в библиотеке 562
Константы в библиотеке 562
Пространство имен self 563
Соглашение 2: формат библиотеки 563
Соглашение 3: использование подкаталогов 565
Автоматическая загрузка классов 566
Библиотека поддержки автозагрузки 566
Каталог модуля 569
PEAR: преобразование имени класса в имя файла 569
Неприятная особенность require_once 573
Собираем все вместе 574
Пример использования всех библиотек 575
Главный файл скрипта 576
Недостатки глобальных переменных 576
Использование функций 577
Интерфейс библиотеки 578
Наследование и расширение модулей 579
Совместимость PHP 5 и PHP 4 581
Резюме 581
Глава 32. Классы и сокрытие данных 582
Новые возможности PHP 5 582
Класс как тип данных 583
Создание нового класса 584
Отличие классов от библиотек 585
Работа с классами 586
Создание объекта некоторого класса 586
Доступ к свойствам объекта 586
Доступ к методам 587
Создание нескольких объектов 588
Перегрузка преобразования в строку 589
Инициализация и разрушение 590
Конструктор 590
Параметры по умолчанию 591
Старый способ создания конструктора 592
Деструктор 592
Вопрос освобождения ресурсов 592
Описание деструктора 594
Алгоритм сбора мусора 596
Циклические ссылки 597
Проблема циклических ссылок 599
Решение проблемы циклических ссылок 600
Принудительное удаление объектов 600
Права доступа к членам класса 600
Модификаторы доступа 601
Public: открытый доступ 601
Private: доступ только из методов класса 601
Protected: доступ из методов производного класса 602
Неявное объявление свойств 602
Статические члены класса 603
Пример: счетчик объектов 603
Пример: кэш ресурсов 604
Общие рекомендации 605
Перехват обращений к членам класса 606
Клонирование объектов 608
Переопределение операции клонирования 609
Запрет клонирования 610
Перехват сериализации 610
Резюме 611
Глава 33. Наследование и виртуальные методы 612
Расширение класса 613
Метод включения 613
Недостатки метода 614
Несовместимость типов 615
Наследование 616
Переопределение методов 617
Модификаторы доступа при переопределении 617
Доступ к методом базового класса 617
Финальные методы 618
Запрет наследования 619
Константы __CLASS__ и __METHOD__ 619
Полиморфизм 619
Абстрагирование 620
Виртуальные методы 622
Расширение иерархии 625
Абстрактные классы и методы 625
Совместимость родственных типов 627
Уточнение типа в функциях 627
Оператор instanceof 628
Обратное преобразование типа 628
Множественное наследование и интерфейсы 629
Интерфейсы 629
Множественная реализация интерфейсов 630
Интерфейсы и абстрактные классы 631
Резюме 631
Глава 34. Обработка ошибок и исключения 633
Что такое ошибка? 633
Роли ошибок 634
Виды ошибок 634
Несерьезные ошибки 635
Серьезные ошибки 636
Прекращение выполнения программы 636
Возврат недопустимого значения 636
Ненормальное состояние программы 637
Вызов функции-обработчика 637
Исключения 638
Базовый синтаксис 638
Инструкция throw 639
Раскрутка стека 640
Исключения и деструкторы 641
Исключения и set_error_handler() 642
Классификация и наследование 643
Базовый класс Exception 644
Использование интерфейсов 646
Блоки-финализаторы 648
Неподдерживаемая конструкция try...finally 648
"Выделение ресурса есть инициализация" 649
Перехват всех исключений 649
Трансформация ошибок 651
Серьезность "несерьезных" ошибок 651
Преобразование ошибок в исключения 653
Пример 653
Код библиотеки PHP_Exceptionizer 654
Иерархия исключений 657
Фильтрация по типам ошибок 658
Перспективы 658
Резюме 659
Глава 35. Отражения, итераторы, массивы 660
Неявный доступ к классам и методам 660
Неявный вызов метода 660
Неявный список аргументов 661
Инстанцирование классов 662
Использование неявных аргументов 662
Аппарат отражений 663
Функция: ReflectionFunction 664
Параметр функции: ReflectionParameter 666
Класс: ReflectionClass 667
Наследование и отражения 669
Свойство класса: ReflectionProperty 671
Метод класса: ReflectionMethod 671
Библиотека расширения: ReflectionExtension 672
Различные утилиты: Reflection 673
Исключение: ReflectionException 673
Иерархия 673
Итераторы 673
Стандартное поведение foreach 674
Определение собственного итератора 674
Как PHP обрабатывает итераторы 677
Множественные итераторы 678
Виртуальные массивы 678
Библиотека SPL 681
Резюме 681
Часть VI. XML в PHP 5 683
Глава 36. Фундамент XML 685
XML-расширения языка PHP 686
Основные понятия XML 688
Типы XML-документов 695
Язык XHTML 697
Резюме 697
Глава 37. DOM1 — объектная модель XML-документа 698
Перечень стандартов DOM 698
Кодировки 700
Класс domDocument, загрузка и выгрузка XML-документов 704
Обобщенный класс domNode 708
Классы NodeList и NamedNodeMap 713
Класс NodeList 713
Класс NamedNodeMap 716
Пример программы отображения свойств узлов XML-документа 718
Свойства объектов подклассов класса domNode 728
Свойства класса domDocument 730
Свойства класса domDocumentType 734
Свойства класса domEntity 736
Свойства класса domElement 738
Свойства класса domDocumentFragment 740
Свойства класса domAttr 741
Свойства класса domProcessingInstruction 743
Свойства класса domCharacterData 745
Свойства класса domText 746
Свойства класса domCDATASection 747
Свойства класса domComment 748
Построение и корректировка XML-документа 749
Создание экземпляра класса стандарта DOM 750
Методы класса domElement для работы с атрибутами 754
Методы класса domCharacterData для работы с текстом 756
Корректировка дерева узлов 760
Выборка узлов из документа 767
"Живые" объекты 769
Резюме 774
Глава 38. DOM2 — пространства имен 775
Пространство имен 775
Не очень простой пример 776
Пересечения имен 784
Использование пространства имен в атрибутах 789
Дополнительные свойства стандарта DOM2 790
Дополнительные методы стандарта DOM2 791
Методы создания элементов и атрибутов в указанном пространстве имен 791
Методы работы с атрибутами элемента класса domElement 797
Методы выбора элементов по имени 797
Методы доступа к текущим соотношениям префиксов и областей имен 798
Дополнительные методы класса NamedNodeMap 802
Дополнительные методы других классов 802
Интерфейс domImplementation 802
Перенос узлов между документами 804
Нормализация узлов документа 806
Обработка исключительных ситуаций в DOM 806
Резюме 811
Глава 39. DOM3 и другие стандарты 812
Модули стандарта DOM 812
Дополнительные интерфейсы и методы стандарта DOM3 816
Свойства и методы класса domDocument 817
Свойства класса domNode 818
Свойства класса Entity 818
Дополнительные интерфейсы 818
Методы обработки HTML-документов класса domDocument 818
Методы loadHTMLFile(), loadHTML() 819
Методы saveHTML(), saveHTMLFile() 824
Поддержка различных кодировок в методах обработки HTML-документов 825
Резюме 827
Глава 40. Пути-дорожки: язык XPath 828
Базовые понятия языка XPath 828
Программа отображения результата XPath-запроса 830
Структура запроса XPath 837
Оси 838
Ось child 839
Ось descendant 843
Ось descendant-or-self 845
Ось self 847
Ось following-sibling 848
Ось following 848
Ось attribute 850
Ось parent 852
Ось ancestor 854
Ось ancestor-or-self 854
Ось preceding-sibling 854
Ось preceding 857
Функции 857
Функции узлов 857
Строковые функции 859
Арифметические функции 862
Поддержка областей имен в языке XPath 863
Поддержка областей имен в функциях узлов 865
Привязка префиксов запроса 866
Резюме 871
Глава 41. Расширение SIMPLEXML 872
Простой пример 872
Загрузка и сохранение XML-документов 874
Доступ к узлам документа 875
Доступ к атрибутам узла 876
Доступ к атрибутам узла по имени 876
Доступ к атрибутам узла в порядке следования 876
Доступ к дочерним узлам 878
Доступ к дочерним узлам по имени 878
Доступ к дочерним узлам в порядке следования 880
Доступ к элементам по выражению языка XPath 881
Корректировка документа 882
Резюме 883
Глава 42. Расширение XSLT 884
Общие сведения о языке XSLT 884
Пример XSLT-трансформации 888
Программа songs.xsl (нулевой уровень) 890
Программа song.xsl (первый уровень) 894
Программы второго уровня 897
Программы третьего уровня 901
Объекты и методы поддержки XSLT в PHP 5 902
Метод transformtoXML() 903
Метод transformtoURI() 907
Метод transformtoDOC() 908
Форматы выходных документов 912
Вызов PHP-функций из PHP-программ 916
Поддержка расширений XSLT (EXSLT) 920
Модуль Common 923
Модуль Math 928
Модуль Sets 930
Модуль Functions 933
Модуль Dates and Times 936
Модуль Strings 941
Модуль Regular Expressions 944
Модуль Random 944
Ссылки 945
Резюме 945
Часть VII. Приемы программирования на PHP 5 947
Глава 43. Загрузка файлов на сервер 949
Multipart-формы 950
Тег выбора файла 950
Закачка файлов и безопасность 950
Поддержка закачки в PHP 951
Простые имена полей закачки 951
Получение закачанного файла 953
Пример: фотоальбом 954
Сложные имена полей 955
Резюме 957
Глава 44. Использование перенаправлений 958
Внешний редирект 958
Внутренний редирект 959
Самопереадресация 961
Резюме 964
Глава 45. Перехват выходного потока 965
Функции перехвата 965
Стек буферов 966
Недостатки "ручного" перехвата 967
Использование объектов и деструкторов 968
Класс для перехвата выходного потока 969
Недостатки класса 971
Проблемы с отладкой 972
Обработчики буферов 972
GZip-сжатие 973
Печать эффективности сжатия 974
Резюме 976
Глава 46. Код и шаблон страницы 977
Первый способ: "вкрапление" HTML в код 977
Второй способ: вставка кода в шаблон 979
Третий способ: Model—View—Controller 980
Шаблон (View) 981
Контроллер (Controller) 981
Модель (Model) 983
Взаимодействие элементов 984
Активные и пассивные шаблоны 985
Активные шаблоны 986
Пассивные шаблоны 986
Недостатки MVC 989
Четвертый способ: компонентный подход 990
Блочная структура Web-страниц 991
Взаимодействие элементов 992
Шаблон (View) 993
Компоненты (Components) 996
Добавление записи 996
Показ записей 997
Показ новостей 997
Проверка корректности входных данных 998
Полномочия Компонентов 999
Достоинства подхода 1000
Система Smarty 1000
Трансляция в код на PHP 1000
Использование Smarty в MVC-схеме 1002
Инструкции Smarty 1003
Одиночные и парные теги 1003
Вставка значения переменной: {$variable ...…} 1004
Модификаторы 1004
Перебор массива: {foreach}...{/foreach} 1005
Ветвление: {if}...{else}...{/if} 1005
Вставка содержимого внешнего файла: {include} 1006
Вывод отладочной консоли: {debug} 1006
Удаление пробелов: {strip}...{/strip} 1006
Оператор присваивания: {assign} 1007
Оператор перехвата блока: {capture} 1007
Циклическая подстановка: {cycle} 1007
Глоссарий 1008
Резюме 1010
Глава 47. Динамическая загрузка данных (AJAX) 1011
Web 2.0 1011
Что такое AJAX? 1012
Google Suggest 1012
Компоненты AJAX-приложения 1013
Язык программирования JavaScript 1014
Программа, встроенная в атрибут 1014
Программа, встроенная в страницу 1014
Динамическое присваивание атрибутов, замыкания 1015
Библиотека JsHttpRequest: кроссбраузерный AJAX и закачка файлов 1016
Пример использования: автоподсказка набора 1018
Клиентская часть 1018
Серверная часть 1021
Закачка файлов методом AJAX 1023
Тестирование клиентской части 1024
Тестирование серверной части 1026
Перехват ошибок в PHP-загрузчике 1027
Отправка формы целиком 1028
Асинхронность запросов 1029
Работа со встроенным объектом XMLHttpRequest 1030
Формат JSON: решение части проблем 1032
Текстовый формат и XMLHttpRequest 1033
Совместимость JsHttpRequest и XMLHttpRequest 1033
Ссылки 1034
Резюме 1035
Глава 48. DbSimple: упрощенный интерфейс работы с СУБД 1036
Что необходимо сценарию от СУБД? 1037
Недостатки PEAR DB, ADOdb и PDO 1038
Основные характеристики DbSimple 1039
DSN-подключение к БД 1040
Обработка ошибок 1040
Пример ошибки подключения 1041
Ошибки и исключения 1042
Основные placeholder-заполнители 1043
Строковый (бинарный) placeholder-заполнитель ? 1043
Списочный/ассоциативный placeholder-заполнитель ?a 1044
Дополнительные placeholder-заполнители 1044
Префиксный placeholder-заполнитель ?_ 1044
Идентификаторный placeholder-заполнитель ?# 1045
Идентификаторно-списочный placeholder-заполнитель ?# 1045
Целочисленный placeholder-заполнитель ?d 1046
Вещественный (дробный) placeholder-заполнитель ?f 1046
Ссылочный placeholder-заполнитель ?n 1046
"Родные" placeholder-заполнители СУБД 1047
Выполнение запросов к БД 1048
Выборка всего результата: select() 1048
Выборка ассоциативного массива 1048
Выборка многомерного массива 1049
Выборка связанного дерева 1050
Выборка строки: selectRow() 1050
Выборка ячейки: selectCell() 1050
Выборка столбца: selectCol() 1051
Выборка страницы: selectPage() 1051
Выполнение обновлений: query() 1052
Обработка ошибок в запросах 1052
Макроподстановки в SQL-запросах 1053
Оптимизация связки "подготовка" + "выполнение" 1055
Журналирование запросов 1056
Транзакции |