Classes
void INIT_CLASS_ENTRY(zend_class_entry ce, char *classname, zend_function_entry *functions); void INIT_OVERLOADED_CLASS_ENTRY(zend_class_entry ce, char *classname, zend_function_entry *functions, zend_function *handle_fcall, zend_function *handle_propget, zend_function *handle_propset); void INIT_OVERLOADED_CLASS_ENTRY_EX(zend_class_entry ce, char *classname, zend_function_entry *functions, zend_function *handle_fcall, zend_function *handle_propget, zend_function *handle_propset, zend_function *handle_propunset, zend_function *handle_propisset);
This triplet of macros initializes a zend_class_entry structure using the properties given. Note that although ce is passed as an immediate value, these are macro structures and thus can and do modify the calling value.
Argument |
Purpose |
---|---|
ce |
A temporary storage unit for holding initialization values. When zend_register_internal_class() is called later, this value will no longer be relevant. |
classname |
NULL-terminated character string containing the userspace visible name of the class. |
functions |
A NULL-terminated vector of zend_function_entry elements as used with zend_module_entry structures. |
handle_fcall handle_propset handle_propget handle_propunset handle_propisset |
Series of "magic methods" corresponding to __call(), __get(), __set(), __unset(), and __isset() respectively. |
void zend_class_implements(zend_class_entry *ce TSRMLS_DC, int num_interfaces, ...);
Marks a class as implementing one or more interfaces.
Argument |
Purpose |
---|---|
ce |
Class entry implementing the interfaces listed |
num_interfaces |
The number of interfaces that follow, passed as zend_class_entry* |
... |
num_interfaces instances of zend_class_entry* pointers |
zend_class_entry *zend_register_internal_class( zend_class_entry *ce TSRMLS_DC); zend_class_entry *zend_register_internal_class_ex(zend_class_entry *ce, zend_class_entry *parent_ce, char *parent_name TSRMLS_DC); zend_class_entry *zend_register_internal_interface( zend_class_entry *ce TSRMLS_DC);
Registers a zend_class_entry previously initialized using the INIT_CLASS_ENTRY family of macros. The _ex variant of this method allows for inheritance at time of registration.
Argument |
Purpose |
---|---|
ce |
The previously initialized class entry being registered |
parent_ce |
The already registered class entry of this class's parent |
parent_name |
Name of the parent class used in error reporting should parent_ce->name be unavailable |
int zend_lookup_class(char *name, int name_len, zend_class_entry ***ppce TSRMLS_DC); int zend_lookup_class_ex(char *name, int name_len, int use_autoload, zend_class_entry ***ppce TSRMLS_DC); zend_class_entry *zend_fetch_class(char * name, uint name_len, int fetch_type TSRMLS_DC);
Locates a class entry by name. zend_fetch_class() returns the class entry directly, whereas the other two methods return a zend_class_entry** container by reference.
Argument |
Purpose |
---|---|
name |
NULL-terminated name of class to look for. Does not need to be lowercased prior to calling this function. |
name_len |
Length of class name excluding the trailing NULL. |
use_autoload |
Set to nonzero if the __autoload() mechanism should be used. |
ppce |
Pointer to a zend_class_entry** variable to store the class definition in. |
Properties
int zend_declare_property(zend_class_entry *ce, char *name, int name_length, zval *value, int access_type TSRMLS_DC); int zend_declare_property_ex(zend_class_entry *ce, char *name, int name_length, zval *value, int access_type, char *doc_comment, int doc_comment_len TSRMLS_DC); int zend_declare_property_null(zend_class_entry *ce, char *name, int name_length, int access_type TSRMLS_DC); int zend_declare_property_bool(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC); int zend_declare_property_long(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC); int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC); int zend_declare_property_string(zend_class_entry *ce, char *name, int name_length, char *value, int access_type TSRMLS_DC); int zend_declare_property_stringl(zend_class_entry *ce, char *name, int name_length, char *value, int value_len, int access_type TSRMLS_DC);
Declares a default property for a class definition. These methods should be called during class declaration time (such as the MINIT phase).
Argument |
Purpose |
---|---|
ce |
The zend_class_entry* being modified. |
name |
NULL-terminated property name. |
name_length |
Length of property name excluding the trailing NULL byte. |
value |
Type-specific valuedepends on method being used. Note that when declaring a property from a zval, the zval must be persistently allocated. |
value_len |
Unique to the stringl variant of these methods; specifies the length of the string pointed to by value excluding the trailing NULL. |
access_type |
One of ZEND_ACC_PUBLIC, ZEND_ACC_PROTECTED, or ZEND_ACC_PRIVATE. To declare a static property rather than a standard one, combine the value of ZEND_ACC_STATIC using a bitwise OR. |
int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC); int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC); int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC); int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC); int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC); int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_len TSRMLS_DC);
Declares a class constant for ce with the provided name and value.
Argument |
Purpose |
---|---|
ce |
The zend_class_entry* being modified. |
name |
NULL-terminated constant name. |
name_length |
Length of property name excluding the trailing NULL byte. |
value |
Type-specific valuedepends on method being used. Note that when declaring a property from a zval, the zval must be persistently allocated. |
value_len |
Unique to the stringl variant of these methods, specifies the length of the string pointed to by value excluding the trailing NULL. |
void zend_update_property(zend_class_entry *scope, zval *object, char *name, int name_length, zval *value TSRMLS_DC); void zend_update_property_null(zend_class_entry *scope, zval *object, char *name, int name_length TSRMLS_DC); void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); void zend_update_property_long(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC); void zend_update_property_string(zend_class_entry *scope, zval *object, char *name, int name_length, char *value TSRMLS_DC); void zend_update_property_stringl(zend_class_entry *scope, zval *object, char *name, int name_length, char *value, int value_len TSRMLS_DC); int zend_update_static_property(zend_class_entry *scope, char *name, int name_length, zval *value TSRMLS_DC); int zend_update_static_property_null(zend_class_entry *scope, char *name, int name_length TSRMLS_DC); int zend_update_static_property_bool(zend_class_entry *scope, char *name, int name_length, long value TSRMLS_DC); int zend_update_static_property_long(zend_class_entry *scope, char *name, int name_length, long value TSRMLS_DC); int zend_update_static_property_double(zend_class_entry *scope, char *name, int name_length, double value TSRMLS_DC); int zend_update_static_property_string(zend_class_entry *scope, char *name, int name_length, char *value TSRMLS_DC); int zend_update_static_property_stringl(zend_class_entry *scope, char *name, int name_length, char *value, int value_len TSRMLS_DC);
Sets a standard or static property of an instantiated object. The nonstatic methods invoke the write_property handler enabling the consistent use of overloading.
Argument |
Purpose |
---|---|
scope |
Active scope at the time of method call to enforce PPP (Public/Protected/Private) restrictions. |
object |
When updating a nonstatic property, this refers to the instance being updated. |
name |
NULL-terminated property name. |
name_length |
Length of property name excluding the trailing NULL byte. |
value |
Type-specific valuedepends on method being used. |
value_len |
Unique to the stringl variant of these methods; specifies the length of the string pointed to by value excluding the trailing NULL. |
zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC); zval *zend_read_static_property(zend_class_entry *scope, char *name, int name_length, zend_bool silent TSRMLS_DC);
Reads a property from a given class or object instance. The nonstatic version invokes the object's read_property handler to allow proper handling of overloaded objects.
Argument |
Purpose |
---|---|
scope |
Active scope at the time of method call to enforce PPP (Public/Protected/Private) restrictions. |
object |
When fetching a nonstatic property, this refers to the instance being updated. |
name |
NULL-terminated property name. |
name_length |
Length of property name excluding the trailing NULL byte. |
silent |
When set to a nonzero value, no "undefined property" errors will be reported. Note: Instances with no read_property handler defined will report an error regardless of the silent argument. |
int add_property_long_ex(zval *object, char *key, uint key_len, long l TSRMLS_DC); int add_property_null_ex(zval *object, char *key, uint key_len TSRMLS_DC); int add_property_bool_ex(zval *object, char *key, uint key_len, int value TSRMLS_DC); int add_property_resource_ex(zval *object, char *key, uint key_len, long value TSRMLS_DC); int add_property_double_ex(zval *object, char *key, uint key_len, double value TSRMLS_DC); int add_property_string_ex(zval *object, char *key, uint key_len, char *str, int dup TSRMLS_DC); int add_property_stringl_ex(zval *object, char *key, uint key_len, char *value, uint value_len, int dup TSRMLS_DC); int add_property_zval_ex(zval *object, char *key, uint key_len, zval *value TSRMLS_DC);
Adds a property to an instantiated object.
Argument |
Purpose |
---|---|
object |
Object instance being updated. |
key |
Either an ordinary NULL-terminated string (for public properties), or a specially formatted string as returned by zend_mangle_property_name(). |
ken_len |
Length of key including the trailing NULL byte. Note: A non-_ex version of these functions also exists that excludes the last NULL from this length parameter. |
value |
Type-specific valuedepends on method being used. |
value_len |
Unique to the stringl variant of these methods; specifies the length of the string pointed to by value excluding the trailing NULL. |
dup |
Set to 0 if the string is in an emalloc'd buffer that can be given to the engine. Set to nonzero to force duplication of the string. |
void zend_mangle_property_name(char **dest, int *dest_len, char *scope, int scope_len, char *propname, int propname_len, int internal);
Encodes a property name with scope visibility information.
Argument |
Purpose |
---|---|
dest |
Populated by reference with newly allocated memory containing mangled property name. |
dest_len |
Length of mangled property name including the trailing NULL byte. |
scope |
To encode the property name for PRIVATE access, specify the NULL-terminated name of the "owning" class here. PROTECTED properties should use a scope of *. PUBLIC properties should not use this function. |
scope_len |
Length of scope string excluding the trailing NULL byte. For example, PROTECTED scope will always have a length of 1. |
propname |
NULL-terminated name of actual property as it will appear in userspace. |
propname_len |
Length of property name excluding the trailing NULL. |
internal |
When set to 0, per-request memory allocation will be used; otherwise, persistent allocation will be performed. Either way, it is the calling scope's responsibility to free this memory. |