Об авторах | 11 |
Благодарности | 13 |
Предисловие | 15 |
Введение | 17 |
|
Часть I. Усовершенствованный PHP | 21 |
|
Глава 1. Основные принципы разработки | 23 |
Зачем нужен PHP | 23 |
Важность планирования | 24 |
Соглашения по кодированию | 26 |
Выбор имён | 27 |
Создавайте код, который легко читать | 28 |
Использование комментариев | 32 |
Выбор говорящих имён | 37 |
Создавайте ясные и согласованные интерфейсы | 40 |
Объединение кода в логические группы | 41 |
Развязка отдельных частей кода | 42 |
Объединение функций в файлы | 42 |
Составление документации | 43 |
Пример разработки интерфейса прикладных программ | 44 |
Заключение | 49 |
|
Глава 2. Усовершенствованный синтаксис | 51 |
Синтаксис языка PHP | 51 |
Определение констант | 52 |
Функции работы с массивами | 53 |
PHP и объектно-ориентированное программирование | 60 |
Классы. Сравнение PHP 3.0 и PHP 4.0 | 65 |
Реализация классов | 66 |
Доступ к объектам | 67 |
Конструкторы | 68 |
Наследование | 69 |
Особые функции объектно-ориентированного программирования | 69 |
Связные списки | 71 |
Связные списки и деревья - обходной манёвр | 72 |
Ассоциативные массивы | 80 |
Многомерные массивы | 82 |
Переменные-параметры | 83 |
Полиморфизм и самомодифицирующийся код | 95 |
Динамический генератор функций | 97 |
Самомодифицирующийся счётчик | 102 |
Заключение | 103 |
|
Глава 3. Проектирование приложения: пример из реальной жизни | 105 |
Краткие сведения о проектах | 105 |
Сравнительный анализ технологий | 107 |
Основные принципы сети IRC | 110 |
Размещение приложения в сети | 112 |
Организация интерфейса с сетью | 113 |
Структура интерфейса | 116 |
Пересылка данных с сервера | 117 |
Пересылка данных на сервер | 119 |
Интерфейс разработчика | 125 |
Интерфейс разработчика HTML-страниц | 125 |
Интерфейс разработчика кода | 125 |
Администрирование и безопасность | 131 |
Сетевой уровень | 132 |
Уровень Web-сервера на основе PHP | 132 |
Уровень базы данных | 132 |
Уровень IRC | 133 |
Реализация | 133 |
Заключение | 134 |
|
Часть II. Web-приложения | 135 |
|
Глава 4. Концепция Web-приложения | 137 |
Протокол HTTP и сеансы работы пользователей | 137 |
Сохранение информации о состоянии | 138 |
Повторная генерация идентификатора сеанса с помощью персональных Интернет-настроек | 140 |
Ручная перезапись URL | 141 |
Динамические пути | 141 |
Манипулирование DNS | 144 |
Необходимый компромисс | 145 |
Встроенная библиотека сеанса PHP | 146 |
Вопросы защиты данных и безопасности | 155 |
Не доверяйте Web | 156 |
Не изобретайте собственную криптографию | 162 |
В коллективе должен быть специалист по защите данных | 170 |
Почему так важны удобство и простота работы | 174 |
Удобство работы с Web-приложениями | 175 |
Методика снижения расходов на создание приложений | 180 |
Ещё несколько слов о необходимости удобства в работе | 183 |
Заключение | 183 |
|
Глава 5. Основные виды стратегии разработки Web-приложений | 185 |
Обычная форма PHP | 186 |
Работа с шаблонами HTML | 192 |
План проекта | 193 |
Работа в коллективе | 193 |
Структура папки | 194 |
Система параллельных версий CVS | 196 |
Графический пользовательский интерфейс и программа CVSWeb | 201 |
Дополнительные возможности CVS | 202 |
Трёхуровневые приложения | 209 |
Традиционная модель «клиент - сервер» | 209 |
Язык PHP и многоуровневые приложения | 210 |
Язык PHP и модель COM | 212 |
PHP и JAVA | 215 |
Заключение | 216 |
|
Глава 6. Доступ к базам данных средствами PHP | 219 |
PHPLib - основная библиотека PHP | 219 |
Историческая справка | 220 |
Преимущества и недостатки | 220 |
Файлы local.inc и prepend.php3 | 221 |
Настройка PHPLib | 221 |
Уровень абстрактного представления базы данных | 222 |
Переносимость | 222 |
Режим отладки | 223 |
Обработка ошибок | 224 |
Пример использования класса DB_Sql | 224 |
Сеанс работы пользователя | 227 |
Запасной режим повторной генерации идентификатора сеанса | 227 |
Буферизация страниц | 228 |
Сериализация | 228 |
Работа с сеансами | 228 |
Функция page_open() | 232 |
Функции purl(), url() и pself() | 233 |
Аутентификация | 233 |
Преимущества аутентификации средствами PHP | 233 |
Пример использования класса Auth | 234 |
Внутренние переменные класса Auth | 235 |
Управление уровнями прав доступа | 238 |
Поразрядные операции | 239 |
Заключение | 244 |
|
Глава 6. Актуальные проблемы разработки приложений | 245 |
Банки знаний | 245 |
Список требований | 247 |
Спецификация | 248 |
Класс Template | 251 |
Рекурсия в языке SQL | 256 |
Аутентификация | 257 |
Конечный продукт | 257 |
PHP и XML | 258 |
Что такое XML? | 258 |
DocBook | 262 |
Язык WML | 263 |
Спецификация RDF | 264 |
Документы в формате XML | 264 |
PHP и Expat | 272 |
Модель DOM - объектная модель документов | 280 |
Базовые интерфейсы | 283 |
Пример. Анализ несложного документа средствами модели DOM | 283 |
Библиотека анализатора документов XML на основе модели DOM LibXML | 284 |
Использование модели WDDX для обмена данными | 291 |
Модель WDDX | 291 |
Новые возможности | 292 |
Возможные сценарии использования | 292 |
Применение модели WDDX для абстрагирования данных | 293 |
Типы данных модели WDDX | 294 |
PHP и WDDX | 295 |
Функции WDDX | 295 |
Заключение | 297 |
|
Глава 8. Примеры использования | 299 |
Компания BizChek.com | 299 |
Электронная почта в Web | 300 |
Выбор PHP | 300 |
Регулярные обновления | 303 |
Заключение | 303 |
Система управления содержимым Web-сраниц SixCMS | 303 |
Сведения о компании | 304 |
Технологии Open Source | 304 |
Выбор PHP | 305 |
Технологические особенности | 306 |
Использование языка PHP в реальных проектах | 307 |
Деловые качества языка PHP | 308 |
Компания MarketPlayer.com | 309 |
Сведения о компании | 309 |
Написанные на PHP программные продукты | 309 |
Выбор PHP | 310 |
Преимущества языка PHP | 310 |
Язык PHP в реальном проекте | 311 |
Сеансы | 312 |
Интеграция сценариев PHP в систему сервера | 313 |
Контроль исходного текста | 313 |
Будущее | 314 |
Заключение | 314 |
|
Часть III. За рамками PHP | 315 |
|
Глава 9. Как расширить PHP 4.0 | 317 |
Краткий обзор | 318 |
Что такое Zend и что такое PHP | 318 |
Возможности для расширения | 319 |
Внешние модули | 319 |
Встроенные модули | 320 |
Ядро Zend | 320 |
Структура исходного кода | 321 |
Соглашения по модулям расширения | 323 |
Макросы | 323 |
Управление памятью | 323 |
Функции работы с папками и файлами | 324 |
Обработка строк | 324 |
Составные типы | 324 |
Система автоматической сборки пакета PHP | 325 |
Создание модулей расширения | 327 |
Компиляция модулей | 328 |
Компиляция с применением стандартных механизмов | 328 |
Ручная компиляция | 329 |
Использование модулей расширения | 329 |
Возможные проблемы | 331 |
Детальное рассмотрение исходного кода | 331 |
Структура модуля | 331 |
Включение заголовочных файлов | 331 |
Объявление экспортируемых функций | 332 |
Объявление блока функций ядра Zend | 333 |
Объявления блока модулей ядра Zend | 335 |
Реализация функций get_module() | 338 |
Реализация экспортируемых функций | 338 |
Заключение | 339 |
Передача параметров | 339 |
Определение количества параметров | 340 |
Получение аргументов | 340 |
Работа с переменным числом аргументов (необязательных параметров) | 341 |
Доступ к аргументам | 343 |
Передача параметров по ссылке | 347 |
Гарантии безопасности при записи для других параметров | 349 |
Создание переменных | 350 |
Краткий обзор | 350 |
Длинные целые (long) | 353 |
Переменные с удвоенной точностью | 354 |
Строки | 354 |
Булевы переменные | 355 |
Массивы | 355 |
Объекты | 358 |
Ресурсы | 359 |
Макросы для автоматического создания глобальных переменных | 361 |
Создание констант | 361 |
Конструктор копий | 362 |
Возвращаемые значения | 363 |
Вывод информации | 365 |
Подготовка данных для функции phpinfo() | 366 |
Информация о ходе выполнения | 367 |
Функции запуска и завершения работы модуля | 368 |
Обращение к пользовательским функциям | 369 |
Работа с файлом инициализации | 371 |
Что дальше | 373 |
Справочные сведения: некоторые макросы настройки | 373 |
Дополнительные макроопределения программного интерфейса | 374 |
|
Алфавитный указатель | 376 |
Приложение А. Лицензия на открытую публикацию | 380 |