RE: [PHP-DEV] One API to rule them all? (Was: Extension Prepend Files)
| From: | François Laupretre | Date: | Mon, 12 Jan 2015 03:44:03 +0000 |
| Subject: | RE: [PHP-DEV] One API to rule them all? (Was: Extension Prepend Files) | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-80406@lists.php.net to get a copy of this message | ||
> De : François Laupretre [mailto:francois@tekwire.net]
>
> If you agree, I propose this as a base to refine:
>
> - Extension exposes only PHP functions and constants (no OO),
> - Each PHP function argument must accept a scalar, an array, or both ('mixed'
> case).
> - one or more PHP function arguments can be optional
> - PHP function arguments can be passed by value or by reference.
Adding these rules :
- Constant values must be static (cannot be computed during MINIT).
- During MINIT and MSHUTDOWN, no activity excepts defining/undefining functions and constants.
- No activity during RINIT/RSHUTDOWN.
And changing this one :
> - PHP functions return value type can be any scalar type or array.
To:
PHP functions return value must be a fixed type (cannot return different types depending on
context). Return value type can be null, bool, long, double, string, or array.
The resulting ruleset :
- Extension exposes only PHP functions and constants (no OO),
- Each PHP function argument must accept a scalar, an array, or both ('mixed' case).
- one or more PHP function arguments can be optional
- PHP function arguments can be passed by value or by reference.
- PHP functions return value must be a fixed type (cannot return different types depending on
context). Return value type can be null, bool, long, double, string, or array.
- Constant value must be static (cannot be computed during MINIT).
I have pushed a first half-baked version of the extension generator I was thinking about. Just for a
look, don't try to run it. I started with json and yaml support for metadata definition. We can
easily add another supported syntax if needed but these should be enough. Look at https://github.com/flaupretre/php-ext-gen/tree/develop
François