pub fn parser_object(&mut self) -> (ArgParser<'_, '_>, Option<&mut ZendObject>) {
        // SAFETY: All fields of the `u2` union are the same type.
        let n_args = unsafe { self.This.u2.num_args };
        let mut args = vec![];

        for i in 0..n_args {
            // SAFETY: Function definition ensures arg lifetime doesn't exceed execution
            // data lifetime.
            let arg = unsafe { self.zend_call_arg(i as usize) };
            args.push(arg);
        }

        let obj = self.This.object_mut();

        (ArgParser::new(args), obj)
    }
Returns an [`ArgParser`] pre-loaded with the arguments contained inside
`self`.

A reference to `$this` is also returned in an [`Option`], which resolves
to [`None`] if this function is not called inside a method.

# Example

```no_run
use ext_php_rs::{types::Zval, zend::ExecuteData, args::Arg, flags::DataType};

#[no_mangle]
pub extern "C" fn example_fn(ex: &mut ExecuteData, retval: &mut Zval) {
let mut a = Arg::new("a", DataType::Long);

let (parser, this) = ex.parser_object();
let parser = parser
.arg(&mut a)
.parse();

if parser.is_err() {
return;
}

dbg!(a, this);
}
```
src/zend/ex.rs