1
0
mirror of https://github.com/php/php-src.git synced 2026-03-30 20:22:36 +02:00

Declare SoapParam properties

This commit is contained in:
Nikita Popov
2021-08-19 11:43:33 +02:00
parent 6cc4e3280e
commit 030bb36ed7
3 changed files with 30 additions and 16 deletions

View File

@@ -162,6 +162,9 @@ static zend_class_entry* soap_header_class_entry;
static zend_class_entry* soap_param_class_entry;
zend_class_entry* soap_var_class_entry;
#define Z_PARAM_NAME_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0)
#define Z_PARAM_DATA_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 1)
ZEND_DECLARE_MODULE_GLOBALS(soap)
static void (*old_error_handler)(int, zend_string *, const uint32_t, zend_string *);
@@ -499,22 +502,21 @@ PHP_MINFO_FUNCTION(soap)
PHP_METHOD(SoapParam, __construct)
{
zval *data;
char *name;
size_t name_length;
zend_string *name;
zval *this_ptr;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zs", &data, &name, &name_length) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zS", &data, &name) == FAILURE) {
RETURN_THROWS();
}
if (name_length == 0) {
if (ZSTR_LEN(name) == 0) {
zend_argument_value_error(2, "cannot be empty");
RETURN_THROWS();
}
this_ptr = ZEND_THIS;
add_property_stringl(this_ptr, "param_name", name, name_length);
add_property_zval(this_ptr, "param_data", data);
ZVAL_STR_COPY(Z_PARAM_NAME_P(this_ptr), name);
ZVAL_COPY(Z_PARAM_DATA_P(this_ptr), data);
}
/* }}} */
@@ -4064,15 +4066,12 @@ static xmlNodePtr serialize_parameter(sdlParamPtr param, zval *param_val, int in
xmlNodePtr xmlParam;
char paramNameBuf[10];
if (param_val &&
Z_TYPE_P(param_val) == IS_OBJECT &&
Z_OBJCE_P(param_val) == soap_param_class_entry) {
zval *param_name;
zval *param_data;
if ((param_name = zend_hash_str_find(Z_OBJPROP_P(param_val), "param_name", sizeof("param_name")-1)) != NULL &&
Z_TYPE_P(param_name) == IS_STRING &&
(param_data = zend_hash_str_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data")-1)) != NULL) {
if (param_val && Z_TYPE_P(param_val) == IS_OBJECT
&& Z_OBJCE_P(param_val) == soap_param_class_entry) {
zval *param_name = Z_PARAM_NAME_P(param_val);
zval *param_data = Z_PARAM_DATA_P(param_val);
ZVAL_DEREF(param_name);
if (Z_TYPE_P(param_name) == IS_STRING && Z_TYPE_P(param_data) != IS_UNDEF) {
param_val = param_data;
name = Z_STRVAL_P(param_name);
}

View File

@@ -8,6 +8,9 @@ function is_soap_fault(mixed $object): bool {}
class SoapParam
{
public string $param_name;
public mixed $param_data;
public function __construct(mixed $data, string $name) {}
}

View File

@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: c72f989c179f1bc136fe008c78ac3605efe55141 */
* Stub hash: a5baf303718efbc6fa5700de62fe8f33e6be0874 */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_use_soap_error_handler, 0, 0, _IS_BOOL, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enable, _IS_BOOL, 0, "true")
@@ -240,6 +240,18 @@ static zend_class_entry *register_class_SoapParam(void)
INIT_CLASS_ENTRY(ce, "SoapParam", class_SoapParam_methods);
class_entry = zend_register_internal_class_ex(&ce, NULL);
zval property_param_name_default_value;
ZVAL_UNDEF(&property_param_name_default_value);
zend_string *property_param_name_name = zend_string_init("param_name", sizeof("param_name") - 1, 1);
zend_declare_typed_property(class_entry, property_param_name_name, &property_param_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
zend_string_release(property_param_name_name);
zval property_param_data_default_value;
ZVAL_UNDEF(&property_param_data_default_value);
zend_string *property_param_data_name = zend_string_init("param_data", sizeof("param_data") - 1, 1);
zend_declare_typed_property(class_entry, property_param_data_name, &property_param_data_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY));
zend_string_release(property_param_data_name);
return class_entry;
}