Возвращение значений из ваших функций в PHP было кратко описано в предыдущем
разделе; в этом разделе дана информация о деталях. Return-значения передаются
через переменную return_value, которая передаётся в вашу функцию как аргумент. Аргумент
return_value состоит из zval-контейнера (см. ранее обсуждение интерфейса вызова), который вы можете
модифицировать. Этот контейнер всегда размещается самостоятельно, поэтому вам
не нужно запускать в нём MAKE_STD_ZVAL. Вместо этого вы можете выполнять прямой доступ к его членам.
Чтобы облегчить возвращение значений из функций и предотвратить нестыковки при
доступе к внутренним структурам zval-контейнера, имеется набор предопределённых макросов (как всегда). Эти макросы
автоматически устанавливают соответствующие тип и значение, как описано в Таблицах 9.14 и 9.15.
Рисунок 36-1. Таблица 9.14. Предопределённые макросы для возвращаемых из функций значений
Примечание: Макрос в Таблице 9.14 автоматически возвращает из вашей функции.
Макрос
Описание
RETURN_RESOURCE(resource)
Возвращает ресурс.
RETURN_BOOL(bool)
Возвращает Boolean.
RETURN_NULL()
Не возвращает ничего (значение NULL).
RETURN_LONG(long)
Возвращает long.
RETURN_DOUBLE(double)
Возвращает double.
RETURN_STRING(string,duplicate)
Возвращает строку. Флаг
duplicate указывает, должна ли строка дублироваться с использованием estrdup().
RETURN_STRINGL(string, length, duplicate)
Возвращает строку специфицированной длины; иначе поведение аналогично RETURN_STRING. Этот макрос, однако, быстрее и безопасен в двоичном режиме.
RETURN_EMPTY_STRING()
Возвращает пустую строку.
RETURN_FALSE
Возвращает Boolean false.
RETURN_TRUE
Возвращает Boolean true.
Рисунок 36-2. Таблица 9.15. Предопределённые макросы
для установки Return-значения функции
Примечание: Макросы в Таблице 9.15 только устанавливают return-значение;
они не выполняют возврат из вашей функции.
Устанавливает return-значение специфицированной строки и дублирует его во
внутренней памяти Zend, если нужно (см. также RETURN_STRING).
RETVAL_STRINGL(string, length, duplicate)
Устанавливает return-значение специфицированной строки и форсирует длину как length
(см. также RETVAL_STRING). Этот макрос быстрее и безопаснее и должен использоваться, если длина строки
известна.
RETVAL_EMPTY_STRING
Устанавливает return-значение - пустую строку.
RETVAL_FALSE
Устанавливает return-значение - Boolean false.
RETVAL_TRUE
Устанавливает return-значение - Boolean true.
Сложные типы, такие как массивы и объекты, можно возвращать с помощью
array_init() и object_init(), а также соответствующих хэш-функций в return_value.
Поскольку эти типы не могут быть сконструированы из обычной информации, для
них нет предопределённых макросов.