pub unsafe fn init<T: RegisteredClass>(ptr: *mut ZendObjectHandlers) {
        std::ptr::copy_nonoverlapping(&std_object_handlers, ptr, 1);
        let offset = ZendClassObject::<T>::std_offset();
        (*ptr).offset = offset.try_into().expect("Invalid offset");
        (*ptr).free_obj = Some(Self::free_obj::<T>);
        (*ptr).read_property = Some(Self::read_property::<T>);
        (*ptr).write_property = Some(Self::write_property::<T>);
        (*ptr).get_properties = Some(Self::get_properties::<T>);
        (*ptr).has_property = Some(Self::has_property::<T>);
    }
Initializes a given set of object handlers by copying the standard
object handlers into the memory location, as well as setting up the
`T` type destructor.

# Parameters

* `ptr` - Pointer to memory location to copy the standard handlers to.

# Safety

Caller must guarantee that the `ptr` given is a valid memory location.

# Panics

* If the offset of the `T` type is not a valid `i32` value.
src/zend/handlers.rs