値を返す

あなたの関数から PHP に値を返す方法については、既に簡単に説明しました。 ここではより詳細に説明します。返り値は return_value 変数を用いて渡されます。この変数は関数の引数として渡されたものです。 return_value 引数は zval コンテナで構成されており (前の章の呼び出しインターフェイスのところを参照ください)、 自由に変更することができます。コンテナ自身はすでに割り当て済みなので、 改めて MAKE_STD_ZVAL を実行する必要はありません。 その内容に直接アクセスすることが可能です。

関数から返す値を作成しやすくするため、そして zval コンテナの内部構造にアクセスしやすくするために、 いくつかのマクロが定義されています。 表46-14 および 表46-15 にまとめたこれらのマクロは、対応する型と値を自動的に設定します。

注意: 表46-14 のマクロは、自動的に関数から値を return します。一方 表46-15 のマクロは単に値を 設定する だけです。関数から値を返すことはありません。

表 46-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_FALSEfalse を返します。
RETURN_TRUEtrue を返します。

表 46-15. 関数の返り値を設定するための、定義済みマクロ

マクロ説明
RETVAL_RESOURCE(resource)指定したリソースを返り値に設定します。
RETVAL_BOOL(bool)指定した Boolean 値を返り値に設定します。
RETVAL_NULLNULL を返り値に設定します。
RETVAL_LONG(long) 指定した long 値に返り値を設定します。
RETVAL_DOUBLE(double) 指定した double 値に返り値を設定します。
RETVAL_STRING(string, duplicate) 指定した文字列に返り値を設定します。必要に応じて Zend 内部メモリに文字列をコピーします (RETURN_STRING も参照ください)。
RETVAL_STRINGL(string, length, duplicate) 指定した文字列を返り値に指定し、その長さが length となるようにします (RETVAL_STRING も参照ください)。 このマクロは高速でバイナリセーフです。 文字列の長さがわかっている場合は常にこのマクロを使用すべきです。
RETVAL_EMPTY_STRING 空の文字列を返り値に指定します。
RETVAL_FALSE false を返り値に指定します。
RETVAL_TRUE true を返り値に指定します。

配列やオブジェクトのような複雑な型を返すには array_init() および object_init() を使用し、対応するハッシュ関数を return_value に使用します。 これらの型は簡単に作成することはできないので、定義済みのマクロは存在しません。