PHP 확장 : __toString ()로 객체를 문자열로 변환
문제
C에서 PHP 확장자를 작성하면 사용자 랜드 개체를 변환하고 싶습니다.IS_OBJECT
) 문자열에 __toString()
하나가 있고 그렇지 않으면 실패합니다. 무엇을 사용해야합니까? 나는 다른 것이 필요하지 않습니다 zval
출력에서, 그냥 a char *
.
zval *zo;
switch (Z_TYPE_P(zo)) {
case IS_STRING:
... Z_STRVAL_P(zo) ...
break;
case IS_OBJECT:
... ???(zo) ...
break;
...
}
해결책
반사 모듈은 같은 기능을 수행합니다
ZVAL_STRINGL(&fname, "__tostring", sizeof("__tostring") - 1, 1);
result= call_user_function_ex(NULL, &object, &fname, &retval_ptr, 0, NULL, 0, NULL TSRMLS_CC);
zval_dtor(&fname);
if (result == FAILURE) {
_DO_THROW("Invocation of method __toString() failed");
/* Returns from this function */
}
그런 다음 z_strval_p ()로 char*를 추출합니다.
그러나 나는 추측 당신은 또한 사용할 수 있습니다
case IS_OBJECT:
if ( SUCCESS==zend_std_cast_object_tostring(uservar, uservar, IS_STRING TSRMLS_CC) ) {
int len = Z_STRLEN_P(uservar);
char* pValue = Z_STRVAL_P(uservar);
...
}
zend_std_cast_object_tostring ()은 zend/zend_object_handlers.c에서 구현되었습니다. 당신은 그것이 당신이 원하는 것을 실제로 할 것인지 확인하고 싶을 것입니다.
제휴하지 않습니다 StackOverflow