Property proxy API
A facility to manage extension object properties tied to C-struct members
|
#include "php_propro.h"
Go to the source code of this file.
Data Structures | |
struct | php_property_proxy |
The internal property proxy. More... | |
struct | php_property_proxy_object |
The userland object. More... | |
Typedefs | |
typedef struct php_property_proxy | php_property_proxy_t |
typedef struct php_property_proxy_object | php_property_proxy_object_t |
Functions | |
php_property_proxy_t * | php_property_proxy_init (zval *container, const char *member_str, size_t member_len) |
Create a property proxy. More... | |
void | php_property_proxy_free (php_property_proxy_t **proxy) |
Destroy and free a property proxy. More... | |
zend_class_entry * | php_property_proxy_get_class_entry (void) |
Get the zend_class_entry of php\PropertyProxy. More... | |
zend_object_value | php_property_proxy_object_new (zend_class_entry *ce) |
Instantiate a new php\PropertyProxy. More... | |
zend_object_value | php_property_proxy_object_new_ex (zend_class_entry *ce, php_property_proxy_t *proxy, php_property_proxy_object_t **ptr) |
Instantiate a new php\PropertyProxy with proxy. More... | |
struct php_property_proxy |
struct php_property_proxy_object |
The userland object.
Return an object instance of php\PropertyProxy to make your C-struct member accessible by reference from PHP userland.
Example:
~~~~~~~~~~{.c} static zval *my_read_prop(zval *object, zval *member, int type, zend_literal *key TSRMLS_DC) { my_object_t *obj = zend_object_store_get_object(object TSRMLS_CC); my_prophandler_t *handler; zval *return_value, *copy = my_cast(IS_STRING, member);
if (SUCCESS == my_get_prophandler(Z_STRVAL_P(copy), Z_STRLEN_P(copy), &handler)) { ALLOC_ZVAL(return_value); Z_SET_REFCOUNT_P(return_value, 0); Z_UNSET_ISREF_P(return_value);
if (type == BP_VAR_R) { handler->read(obj, return_value TSRMLS_CC); } else { // // This is the interesting part // php_property_proxy_t *proxy; zend_object_value proxy_ov; zend_class_entry *proxy_ce;
proxy = php_property_proxy_init(object, Z_STRVAL_P(copy), Z_STRLEN_P(copy) TSRMLS_CC); proxy_ce = php_property_proxy_get_class_entry(); proxy_ov = php_property_proxy_object_new_ex(proxy_ce, proxy, NULL TSRMLS_CC); RETVAL_OBJVAL(proxy_ov, 0); } } else { zend_object_handlers *oh = zend_get_std_object_handlers(); return_value = oh->read_property(object, member, type, key TSRMLS_CC); }
zval_ptr_dtor(©);
return return_value; }
Data Fields | ||
---|---|---|
struct php_property_proxy_object * | parent | A reference to any parent property proxy object. |
php_property_proxy_t * | proxy | The actual property proxy. |
zend_object | zo | The std zend_object. |
zend_object_value | zv | The object value for easy zval creation. |
typedef struct php_property_proxy_object php_property_proxy_object_t |
typedef struct php_property_proxy php_property_proxy_t |
void php_property_proxy_free | ( | php_property_proxy_t ** | proxy | ) |
Destroy and free a property proxy.
The destruction of the property proxy object calls this.
proxy | a pointer to the allocated property proxy |
zend_class_entry* php_property_proxy_get_class_entry | ( | void | ) |
Get the zend_class_entry of php\PropertyProxy.
php_property_proxy_t* php_property_proxy_init | ( | zval * | container, |
const char * | member_str, | ||
size_t | member_len | ||
) |
Create a property proxy.
The property proxy will forward reads and writes to itself to the proxied property with name member_str of container.
container | the container holding the property |
member_str | the name of the proxied property |
member_len | the length of the name |
zend_object_value php_property_proxy_object_new | ( | zend_class_entry * | ce | ) |
Instantiate a new php\PropertyProxy.
ce | the property proxy or derived class entry |
zend_object_value php_property_proxy_object_new_ex | ( | zend_class_entry * | ce, |
php_property_proxy_t * | proxy, | ||
php_property_proxy_object_t ** | ptr | ||
) |
Instantiate a new php\PropertyProxy with proxy.
ce | the property proxy or derived class entry |
proxy | the internal property proxy |
ptr | a pointer to store the resulting property proxy object |
Referenced by php_property_proxy_object_new().