Property proxy API
A facility to manage extension object properties tied to C-struct members
php_propro_api.h File Reference
#include "php_propro.h"
Include dependency graph for php_propro_api.h:
This graph shows which files directly or indirectly include this file:

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

Here is the call graph for this function:

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

Referenced by php_property_proxy_object_new().

Here is the caller graph for this function: