Учебник РНР (перевод Alexandr Pyramidin) Размещено на PHPClub.Net
Назад Вперёд

Глава 27. Строение Исходного Кода

Содержание
Соглашения по расширениям
Макросы
Работа с памятью
Функции работы с файлами и директориями
Работа со строками
Сложные типы

Предварительные условия. Прежде чем работать с остальной частью этой главы, вы должны запросить чистые, немодифицированные исходные деревья вашего любимого Web-сервера.
Мы работаем с Apache (доступен с https://www.apache.org) и, конечно, с PHP (доступен с https://www.php.net).

Альтернативно вы можете использовать архивы исходников на CD-ROM, сопровождающим эту книгу. Все примеры в этой книге работают с архивами исходников с CD-ROM; мы не можем гарантировать это для каждой версии, полученной из Net. Однако, поскольку программное обеспечение Open Source разрабатывается очень быстро, велики шансы того, что версии на CD-ROM уже устарели и не имеют всей необходимой функциональности. Если вы не можете получить с соответствующих Web-сайтов официальные архивы для работы, поэкспериментируйте с архивами на CD-ROM.

Убедитесь, что вы можете скомпилировать рабочее окружение PHP самостоятельно!
Мы здесь не углубляемся в этот вопрос, поскольку вы уже изучали базовые возможности в этой главе.

Прежде чем начинать обсуждение кода, вы должны познакомиться с исходным деревом, чтобы быстро перемещаться по PHP-файлам. Это необходимо для реализации и отладки расширений.

После извлечения PHP-архива вы увидите структуру директорий, примерно как на Рисунке 9.2.

Рисунок 27-1. Рисунок 9.2. Структура основных директорий исходного дерева PHP.

В таблице описано содержимое большинства этих директорий.

Директория Содержимое
php-4Главные исходные файлы PHP и главные header-файлы; здесь вы найдёте все определения API РНР, макросов etc. (это важно).
ext Хранилище динамических и встроенных модулей; по умолчанию это "официальные" модули PHP, которые интегрированы в главное исходное дерево. В PHP 4.0 можно компилировать эти стандартные расширения как динамически загружаемые модули (как минимум те, которые это поддерживают).
pearДиректория для хранения классов PHP. На момент написания она была всё ещё в стадии разработки, но здесь делается попытка создания чего-либо подобного CPAN для Perl.
sapiСодержит код для различных абстрактных слоёв сервера.
TSRMМестонахождение "Thread SafeResource Manager" (TSRM) для Zend и PHP.
ZendМестонахождение файла Zend; здесь вы найдёте все определения Zend API, макросов etc. (это важно).

Рассмотрение всех файлов, входящих в пакет PHP выходит за рамки этой главы. Однако, вы должны хотя бы кратко просмотреть следующие файлы:

  • php.h, размещённый в главной директории PHP. Это файл содержит определения большинства макросов и API РНР.

  • zend.h, размещённый в главной директории Zend. Это файл содержит большинство макросов и определений Zend'а.

  • zend_API.h, также размещённый в директории Zend, который определяет API Zend'а.

Вы должны также проследовать по некоторым включениям в эти файлы; например, относящимся к Zend executor, поддержке файлов инициализации PHP, и подобным. После чтения этих файлов выделите время для просмотра пакета, чтобы увидеть взаимосвязи файлов и модулей - как они соотносятся и, особенно, как они используют друг друга. Это также поможет вам приспособиться к стилю кодирования, в котором авторизован PHP. Для расширения PHP вы должны быстро приспособиться к этому стилю.

Соглашения по расширениям

Zend построен с использованием определённых соглашений; чтобы исключить нарушение стандартов Zend, вы должны следовать правилам, описанным в следующих разделах.


Назад Оглавление Вперёд
Zend-машина ВверхМакросы