Property proxy API
A facility to manage extension object properties tied to C-struct members
 All Data Structures Files Functions Variables Typedefs
php_propro.h File Reference

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_tphp_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...
 

Data Structure Documentation

struct php_property_proxy

The internal property proxy.

Container for the object/array holding the proxied property.

Data Fields
zval * container The container holding the property.
size_t member_len The length of the name.
char * member_str The name of the proxied property.
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:

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
//
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_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(&copy);
return return_value;
}
Collaboration diagram for php_property_proxy_object:
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 Documentation

Function Documentation

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.

Parameters
proxya pointer to the allocated property proxy
zend_class_entry* php_property_proxy_get_class_entry ( void  )

Get the zend_class_entry of php\PropertyProxy.

Returns
the class entry pointer
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.

Parameters
containerthe container holding the property
member_strthe name of the proxied property
member_lenthe length of the name
Returns
a new property proxy
zend_object_value php_property_proxy_object_new ( zend_class_entry *  ce)

Instantiate a new php\PropertyProxy.

Parameters
cethe property proxy or derived class entry
Returns
the zval object value
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.

Parameters
cethe property proxy or derived class entry
proxythe internal property proxy
ptra pointer to store the resulting property proxy object
Returns
the zval object value