X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-propro;a=blobdiff_plain;f=html%2Fphp__propro_8h.html;fp=html%2Fphp__propro_8h.html;h=12ec79e87ce1727190074676d89f7effb2a25fdb;hp=0000000000000000000000000000000000000000;hb=36da2074d28309d1704b47e121f432fcdaf8a245;hpb=6efaa7c324c0bb32883fa7439182d5f8d0736f6b diff --git a/html/php__propro_8h.html b/html/php__propro_8h.html new file mode 100644 index 0000000..12ec79e --- /dev/null +++ b/html/php__propro_8h.html @@ -0,0 +1,464 @@ + + + + + + +Property proxy API: php_propro.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
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:
+
+
Collaboration graph
+ + +
[legend]
+ + + + + + + + + + + + + + +
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

+ +
+
+ +
+
+ +
+
+ + + + +
typedef struct php_property_proxy php_property_proxy_t
+
+ +
+
+

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_tproxy,
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
+ +
+
+
+
+ + + +