pub fn set(&self, self_: &'a mut T, value: &Zval) -> PhpResult {
        match self {
            Property::Field(field) => field(self_)
                .set(value)
                .map_err(|e| format!("Failed to set property value: {e:?}").into()),
            Property::Method { get: _, set } => match set {
                Some(set) => set(self_, value),
                None => Err("No setter available for this property.".into()),
            },
        }
    }
Attempts to set the value of the property inside the given object
`self_`.

The new value of the property is supplied inside the given [`Zval`]
`value`. If unsuccessful, a [`PhpException`] is returned inside the
error variant of a result.

# Parameters

* `self_` - The object to set the property in.
* `value` - The [`Zval`] containing the new content for the property.

# Returns

Nothing upon success

# Errors

A [`PhpException`] inside an error variant when the property could not
be set.

# Examples

```no_run
# use ext_php_rs::props::Property;
# use ext_php_rs::types::Zval;
# use ext_php_rs::convert::IntoZval;
struct Test {
pub a: i32,
}

let prop: Property<Test> = Property::field(|obj: &mut Test| &mut obj.a);

let mut test = Test { a: 500 };
let zv = 100.into_zval(false).unwrap();
prop.set(&mut test, &zv).unwrap();
assert_eq!(test.a, 100);
```

[`PhpException`]: crate::exception::PhpException
src/props.rs