mirror of
https://github.com/php/php-src.git
synced 2024-09-23 10:57:26 +00:00
121 lines
4.5 KiB
Plaintext
121 lines
4.5 KiB
Plaintext
|
|
WHAT IT IS
|
|
|
|
It's a tool for automatically creating the basic framework for a PHP module
|
|
and writing C code handling arguments passed to your functions from a simple
|
|
configuration file. See an example at the end of this file.
|
|
|
|
HOW TO USE IT
|
|
|
|
Very simple. First, cd do directory ext/ in PHP 4 sources. If you just need
|
|
the basic framework and will be writing all the code in your functions
|
|
yourself, you can now do './ext_skel your_module_name' and everything you
|
|
need is placed in directory your_module_name. In fact, if you don't need to
|
|
test the existence of any external header files, libraries or functions in
|
|
them, the module is already almost ready to be compiled in PHP. Just remove
|
|
3 comments in your_module_name/config.m4, cd back up to PHP sources top
|
|
directory, and do './buildconf; ./configure --enable-your_module_name; make'.
|
|
|
|
But if you already have planned the overall scheme of your module, what
|
|
functions it will contain, their return types and the arguments they take
|
|
(a very good idea) and don't want to bother yourself with creating function
|
|
definitions and handling arguments passed yourself, it's time to create a
|
|
function definitions file, which you will give as the second argument to
|
|
ext_skel.
|
|
|
|
FORMAT OF FUNCTION DEFINITIONS FILE
|
|
|
|
All the definitions must be on one line. In it's simplest form, it's just
|
|
the function name, ie.
|
|
|
|
my_function
|
|
|
|
but then you'll be left with an almost empty function body without any
|
|
argument handling.
|
|
|
|
Arguments are given in parenthesis after the function name, and are of
|
|
the form 'argument_type argument_name'. Arguments are separated from each
|
|
other with a comma and optional space. Argument_type can be one of int,
|
|
double, string, array, object or mixed.
|
|
|
|
An optional argument is separated from the previous by an optional space,
|
|
then '[' and of course comma and optional space, like all the other
|
|
arguments. You should close a row of optional arguments with same amount of
|
|
']'s as there where '['s. Currently, it does not harm if you forget to do it
|
|
or there is a wrong amount of ']'s, but this may change in the future.
|
|
|
|
An example:
|
|
|
|
my_function(int arg1, int arg2 [, int arg3 [, int arg4]])
|
|
|
|
Arguments arg3 and arg4 are optional.
|
|
|
|
If possible, the function definition should also contain it's return type
|
|
in front of the definition. It's not actually used for any C code generating
|
|
purposes but PHP in-source documentation instead, and as such, very useful.
|
|
It can be any of int, double, string, bool, array, object, resource, mixed
|
|
or void.
|
|
|
|
The file must contain nothing else but function definitions, no comments or
|
|
empty lines.
|
|
|
|
CURRENT LIMITATIONS AND BUGS
|
|
|
|
Only arguments of types int, float, string and array are handled. For other
|
|
types you must write the code yourself. And for type mixed, it wouldn't even
|
|
be possible to write anything, because only you know what to expect.
|
|
|
|
It doesn't yet handle correctly grouped optional arguments, ie. it thinks
|
|
'type function(type arg1 [, type arg2, type arg3]' to actually be
|
|
'type function(type arg1 [, type arg2 [, type arg3]]', so you have to
|
|
manually correct the switch construct created. But it's nothing more than
|
|
deleting a few 'case ?:' lines and fixing PHP in-source documentation proto.
|
|
|
|
EXAMPLE
|
|
|
|
The following _one_ line
|
|
|
|
bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
|
|
|
|
will create this function definition for you (note that there are a few
|
|
question marks to be replaced by you, and you must of course add your own
|
|
value definitions too):
|
|
|
|
/* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y[, int color])
|
|
*/
|
|
PHP_FUNCTION(my_drawtext)
|
|
{
|
|
zval **image, **text, **font, **x, **y, **color;
|
|
int argc;
|
|
int image_id = -1;
|
|
int font_id = -1;
|
|
???LS_FETCH();
|
|
|
|
argc = ZEND_NUM_ARGS();
|
|
if (argc < 5 || argc > 6 || zend_get_parameters_ex(argc, &image, &text, &font, &x, &y, &color) == FAILURE) {
|
|
WRONG_PARAM_COUNT;
|
|
}
|
|
|
|
ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???G());
|
|
ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???G());
|
|
|
|
switch (argc) {
|
|
case 6:
|
|
convert_to_long_ex(color);
|
|
/* Fall-through. */
|
|
case 5:
|
|
convert_to_long_ex(y);
|
|
convert_to_long_ex(x);
|
|
/* font: fetching resources already handled. */
|
|
convert_to_string_ex(text);
|
|
/* image: fetching resources already handled. */
|
|
break;
|
|
default:
|
|
WRONG_PARAM_COUNT;
|
|
}
|
|
|
|
php_error(E_WARNING, "my_drawtext: not yet implemented");
|
|
}
|
|
/* }}} */
|
|
|