generate-ext - Create the subversion source layout for a new PHP extension that is PECL-ready


The generate-pecl command is used to create a bare skeleton for a new PECL package or PHP extension as it will reside in Subversion. This is designed to provide all of the functionality of the ext_skel command but also generates a package.xml and other files that can be used to automatically update for a release.

One argument is accepted, extension.

This command automatically creates class definitions as well as ZEND_ARG_INFO for parameters to provide useful reflection to your extension's users.


The extension argument is the name of the package to create a skeleton for. This is used as the directory name and as the extension name used within files related to creating a PECL package.


The --proto or -p option specifies a file containing function and method prototypes to create in your new extension.

As an example, here are some supported protos:

  • int myfunc(string firstarg, unicode secondarg, array thirdarg, object fourtharg [, double optionalarg1 [, float optionalarg2 [, callback optionalarg3 [, text optionalarg4]]]])
  • void Myclass::myfunc(array|object arg1, bool arg2, class arg3, resource arg4, mixed arg5 [, ... varargs])
  • static int Myclass::staticfunc()
  • protected string Myclass::otherguy([mixed optionalarg])
  • static protected object Myclass::factory(text path)

A proto begins with either the return type or access modifiers static and one of public, protected and private followed by the return type. Next, the name of the function, or name of the class::method is specified, followed by an argument list. Optional methods are enclosed in [brackets] and whitespace is important, so follow the conventions as in the above examples.

Each argument consists of a type followed by an argument name. The types are informed by parameter parsing as supported by PHP's internal zend_parse_parameters(). This is thoroughly documented in the file README.PARAMETER_PARSING inside PHP's source code. Note that some of the parameter parsing choices only work in PHP 6, in particular the unicode-related options.

The following types are supported:

  • array (maps to 'a' in parameter parsing)
  • array|object (maps to 'A' in parameter parsing)
  • bool (maps to 'b' in parameter parsing)
  • boolean (maps to 'b' in parameter parsing)
  • callback (maps to 'f' in parameter parsing)
  • class (Maps to 'C' in parameter parsing)
  • double (maps to 'd' in parameter parsing)
  • float (maps to 'd' in parameter parsing)
  • handle (maps to 'r' in parameter parsing)
  • int (Maps to 'L' in parameter parsing)
  • long (Maps to 'L' in parameter parsing)
  • mixed (maps to 'z' in parameter parsing)
  • object (maps to 'o' in parameter parsing)
  • resource (maps to 'r' in parameter parsing)
  • string (maps to 's' in parameter parsing)
  • text (Maps to 'T' in parameter parsing)
  • unicode (maps to 'u' in parameter parsing)
  • void, use only for the return value of a function that returns nothing
  • ... (varags: maps to '*' in parameter parsing) However, if the parameter is not optional, if maps to '+' is used.