이 글은 주로 PHP 소스 코드 12에 대한 간략한 논의를 소개합니다: return_value에 대해 반환 값에는 특정 참조 값이 있습니다. 이제 필요한 친구들이 참조할 수 있도록 공유합니다.
한동안은 PHP를 알고 있습니다. 확장 함수에서 PHP_FUNCTION을 사용하고 이 함수의 값을 반환하려면 return_value에 값을 할당하면 됩니다.
그때 제가 직접 코드를 추적해 보니 return_value 같은 전역 변수나 return_value가 포함된 전역 해시 테이블이 있는 줄 알았어요. 그러다가 계속 디버깅했는데 발견하지 못했어요.
오늘 Niao 형제에게 물어보기 전까지는 깨닫지 못했습니다. Niao 형제는 이메일에서 다음과 같이 말했습니다. "return_value는 매크로로 확장된 PHP_FUCTION 함수를 제공하는 PHP의 매개변수입니다. 이 매개변수를 복사하면 ZE는 프런트엔드 호출 스크립트에 값을 반환합니다."
The 매크로 정의는 다음과 같습니다.
#define PHP_FUNCTION ZEND_FUNCTION#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
일부 내장 함수(각각)는 ZEND_FUNCTION을 직접 사용합니다.
확장 함수는 PHP_FUNCTION을 사용합니다.
일부 확장 함수에서는 return_value를 사용하지 않고 return_value가 포함된 일부 매크로를 사용하는 경우가 종종 있습니다. 대신에.
공통 매크로는 다음과 같습니다.
// zend_API.h 500行开始 #define ZVAL_FALSE(z) ZVAL_BOOL(z, 0)#define ZVAL_TRUE(z) ZVAL_BOOL(z, 1) #define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value, l) #define RETVAL_BOOL(b) ZVAL_BOOL(return_value, b) #define RETVAL_NULL() ZVAL_NULL(return_value) #define RETVAL_LONG(l) ZVAL_LONG(return_value, l) #define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value, d) #define RETVAL_STRING(s, duplicate) ZVAL_STRING(return_value, s, duplicate) #define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate) #define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value) #define RETVAL_ZVAL(zv, copy, dtor) ZVAL_ZVAL(return_value, zv, copy, dtor) #define RETVAL_FALSE ZVAL_BOOL(return_value, 0) #define RETVAL_TRUE ZVAL_BOOL(return_value, 1) #define RETURN_RESOURCE(l) { RETVAL_RESOURCE(l); return; } #define RETURN_BOOL(b) { RETVAL_BOOL(b); return; } #define RETURN_NULL() { RETVAL_NULL(); return;} #define RETURN_LONG(l) { RETVAL_LONG(l); return; } #define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; } #define RETURN_STRING(s, duplicate) { RETVAL_STRING(s, duplicate); return; } #define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; } #define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; } #define RETURN_ZVAL(zv, copy, dtor) { RETVAL_ZVAL(zv, copy, dtor); return; } #define RETURN_FALSE { RETVAL_FALSE; return; } #define RETURN_TRUE { RETVAL_TRUE; return; }
위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!
관련 권장 사항:
PHP 소스 코드에 대한 간략한 토론 11: array_key_exists, in_array 소개
PHP 소스 코드에 대한 간략한 토론 10: array_keys, array_values 함수에 대해
간략한 내용 PHP 소스 코드 9에 대한 토론: array_unshift 소개, array_push
위 내용은 PHP 소스 코드 12에 대한 간략한 토론: return_value 반환 값에 대하여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!