Chapter 26. Source Layout

Table of Contents
Extension Conventions
Macros
Memory Management
Directory and File Functions
String Handling
Complex Types

Before we start discussing code issues, you should familiarize yourself with the source tree to be able to quickly navigate through PHP's files. This is a must-have ability to implement and debug extensions.

After extracting the PHP archive, you'll see a directory layout similar to that in Figure 9.2.

Figure 26-1. Figure 9.2. Main directory layout of the PHP source tree.

The following table describes the contents of the major directories.

DirectoryContents
php-4Main PHP source files and main header files; here you'll find all of PHP's API definitions, macros, etc. (important).
extRepository for dynamic and built-in modules; by default, these are the "official" PHP modules that have been integrated into the main source tree. In PHP 4.0, it's possible to compile these standard extensions as dynamic loadable modules (at least, those that support it).
pearDirectory for the PHP class repository. At the time of this writing, this is still in the design phase, but it's being tried to establish something similar to CPAN for Perl here.
sapiContains the code for the different server abstraction layers.
TSRMLocation of the "Thread Safe Resource Manager" (TSRM) for Zend and PHP.
ZendLocation of Zend's file; here you'll find all of Zend's API definitions, macros, etc. (important).

Discussing all the files included in the PHP package is beyond the scope of this chapter. However, you should take a close look at the following files:

You should also follow some sub-inclusions from these files; for example, the ones relating to the Zend executor, the PHP initialization file support, and such. After reading these files, take the time to navigate around the package a little to see the interdependencies of all files and modules - how they relate to each other and especially how they make use of each other. This also helps you to adapt to the coding style in which PHP is authored. To extend PHP, you should quickly adapt to this style.

Extension Conventions

Zend is built using certain conventions; to avoid breaking its standards, you should follow the rules described in the following sections.