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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user