- Add infrastructure for built-in functions to hint whether they
return by reference or not. It is NOT currently used for anything,
except for interface prototypes (you can use it to request that the
function that implements your prototype returns by reference or
doesn't return by reference).
For downwards compatibility - by default, interface prototypes are
agnostic as to whether the function that implements them returns
by reference or not. Use ZEND_BEGIN_ARG_INFO_EX() with
ZEND_RETURN_VALUE/ZEND_RETURN_REFERENCE to change that.
- Fix ArrayAccess::getOffset() to conduct additional checks.
If your getOffset() should work with multidimensional arrays - it
must return by reference.
Be paranoid when building a snapshot: if the module is not a core
module (eg: it comes from outside of ext or sapi) and it defaults to "yes",
then force it to become shared. This will prevent a pecl ext from
accidentally being compiled statically into the core, and prevent that
ext from breaking the core build. You can still manually force a static
build by explicitly specifying the args for that extension on your configure
line.
- Enforce exceptions to be derived from class Exception. This allows
users to perform catch-all. It's not yet complete, so don't get
comfortable with it just yet :) Updates are coming soon.
- Implement zend_throw_exception() using zend_throw_exception_ex()
assigned to its objects.
Implementation notes for overloaded object modules:
- If you return a zval which is not otherwise referenced by the extension
or the engine's symbol table, its reference count should be 0.
- If you receive a value zval in write_property/write_dimension, you
may only modify it if its reference count is 1. Otherwise, you must
create a copy of that zval before making any changes. You should NOT
modify the reference count of the value passed to you.
Have fun!