Returning values from your functions to PHP was described briefly
   in an earlier section; this section gives the details. Return
   values are passed via the return_value variable,
   which is passed to your functions as argument. The
   return_value argument consists of a
   zval container (see the earlier discussion of the
   call interface) that you can freely modify. The container itself is
   already allocated, so you don't have to run
   MAKE_STD_ZVAL on it. Instead, you can access its
   members directly.
  
   To make returning values from functions easier and to prevent
   hassles with accessing the internal structures of the
   zval container, a set of predefined macros is
   available (as usual). These macros automatically set the
   correspondent type and value, as described in 
   表格 35-1 and 表格 35-2.
  
注: 
    The macros in 表格 35-1 automatically 
    return from your function, those in 
    表格 35-2 only set 
    the return value; they don't return from your function.
   
表格 35-1. Predefined Macros for Returning Values from a
    Function
| Macro | Description | 
| RETURN_RESOURCE(resource) | Returns a resource. | 
| RETURN_BOOL(bool) | Returns a Boolean. | 
| RETURN_NULL() | Returns nothing (a NULL value). | 
| RETURN_LONG(long) | Returns a long. | 
| RETURN_DOUBLE(double) | Returns a double. | 
| RETURN_STRING(string, duplicate) | Returns a string. The duplicate flag indicates
        whether the string should be duplicated using
        estrdup(). | 
| RETURN_STRINGL(string, length, duplicate) | Returns a string of the specified length; otherwise, behaves
        like RETURN_STRING. This macro is faster
        and binary-safe, however. | 
| RETURN_EMPTY_STRING() | Returns an empty string. | 
| RETURN_FALSE | Returns Boolean false. | 
| RETURN_TRUE | Returns Boolean true. | 
表格 35-2. Predefined Macros for Setting the Return Value
    of a Function
| Macro | Description | 
| RETVAL_RESOURCE(resource) | Sets the return value to the specified
        resource. | 
| RETVAL_BOOL(bool) | Sets the return value to the specified
        Boolean value. | 
| RETVAL_NULL | Sets the return value to NULL. | 
| RETVAL_LONG(long) | Sets the return value to the specified long. | 
| RETVAL_DOUBLE(double) | Sets the return value to the specified double. | 
| RETVAL_STRING(string, duplicate) | Sets the return value to the specified string and duplicates
        it to Zend internal memory if desired (see also
        RETURN_STRING). | 
| RETVAL_STRINGL(string, length, duplicate) | Sets the return value to the specified string and forces the
        length to become length (see also
        RETVAL_STRING). This macro is faster and
        binary-safe, and should be used whenever the string length is
        known. | 
| RETVAL_EMPTY_STRING | Sets the return value to an empty string. | 
| RETVAL_FALSE | Sets the return value to Boolean false. | 
| RETVAL_TRUE | Sets the return value to Boolean true. | 
   Complex types such as arrays and objects can be returned by using
   array_init() and
   object_init(), as well as the corresponding hash
   functions on return_value. Since these types cannot
   be constructed of trivial information, there are no predefined
   macros for them.