Type Definition ext_php_rs::zend::ExecuteData[][src]

pub type ExecuteData = zend_execute_data;
Expand description

Execute data passed when a function is called from PHP.

This generally contains things related to the call, including but not limited to:

  • Arguments
  • $this object reference
  • Reference to return value
  • Previous execute data

Implementations

Returns an ArgParser pre-loaded with the arguments contained inside self.

Example
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);

    // The `parse_args!()` macro can be used for this.
    let parser = ex.parser()
        .arg(&mut a)
        .parse();

    if parser.is_err() {
        return;
    }

    dbg!(a);
}

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
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);
}

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.

This function differs from parse_object in the fact that it returns a reference to a ZendClassObject, which is an object that contains an arbitrary Rust type at the start of the object. The object will also resolve to None if the function is called inside a method that does not belong to an object with type T.

Example
use ext_php_rs::{types::Zval, zend::ExecuteData, args::Arg, flags::DataType, prelude::*};

#[php_class]
#[derive(Debug)]
struct Example;

#[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_method::<Example>();
    let parser = parser
        .arg(&mut a)
        .parse();

    if parser.is_err() {
        return;
    }

    dbg!(a, this);
}

#[php_module]
pub fn module(module: ModuleBuilder) -> ModuleBuilder {
    module
}

Attempts to retrieve a reference to the underlying class object of the Zend object.

Returns a ZendClassObject if the execution data contained a valid object of type T, otherwise returns None.

Example
use ext_php_rs::{types::Zval, zend::ExecuteData, prelude::*};

#[php_class]
#[derive(Debug)]
struct Example;

#[no_mangle]
pub extern "C" fn example_fn(ex: &mut ExecuteData, retval: &mut Zval) {
    let this = ex.get_object::<Example>();
    dbg!(this);
}

#[php_module]
pub fn module(module: ModuleBuilder) -> ModuleBuilder {
    module
}

Attempts to retrieve the ‘this’ object, which can be used in class methods to retrieve the underlying Zend object.

Example
use ext_php_rs::{types::Zval, zend::ExecuteData};

#[no_mangle]
pub extern "C" fn example_fn(ex: &mut ExecuteData, retval: &mut Zval) {
    let this = ex.get_self();
    dbg!(this);
}