00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ONPHP_H
00013 #define ONPHP_H
00014
00015 #include "php.h"
00016 #include "zend_interfaces.h"
00017
00018 #define ONPHP_VERSION "0.10.8"
00019 #define ONPHP_MODULE_NAME "onPHP"
00020
00021 #define ZVAL_FREE(z) zval_dtor(z); FREE_ZVAL(z);
00022
00023 #define ONPHP_ME(class_name, function_name, arg_info, flags) \
00024 PHP_ME(onphp_ ## class_name, function_name, arg_info, flags)
00025
00026 #define ONPHP_ABSTRACT_ME(class_name, function_name, arg_info, flags) \
00027 ZEND_FENTRY(function_name, NULL, arg_info, flags|ZEND_ACC_ABSTRACT)
00028
00029 #define REGISTER_ONPHP_INTERFACE(class_name) \
00030 spl_register_interface(&onphp_ce_ ## class_name, # class_name, onphp_funcs_ ## class_name TSRMLS_CC);
00031
00032 #define REGISTER_ONPHP_IMPLEMENTS(class_name, interface_name) \
00033 zend_class_implements(onphp_ce_ ## class_name TSRMLS_CC, 1, onphp_ce_ ## interface_name);
00034
00035 #define REGISTER_ONPHP_STD_CLASS(class_name, obj_ctor) \
00036 spl_register_std_class(&onphp_ce_ ## class_name, # class_name, obj_ctor, NULL TSRMLS_CC);
00037
00038 #define REGISTER_ONPHP_STD_CLASS_EX(class_name) \
00039 spl_register_std_class(&onphp_ce_ ## class_name, # class_name, onphp_empty_object_new, onphp_funcs_ ## class_name TSRMLS_CC);
00040
00041 #define REGISTER_ONPHP_SUB_CLASS_EX(class_name, parent_class_name) \
00042 spl_register_sub_class(&onphp_ce_ ## class_name, onphp_ce_ ## parent_class_name, # class_name, onphp_empty_object_new, onphp_funcs_ ## class_name TSRMLS_CC);
00043
00044 #define REGISTER_ONPHP_CUSTOM_SUB_CLASS_EX(class_name, parent_class_name, obj_ctor, funcs) \
00045 spl_register_sub_class(&onphp_ce_ ## class_name, onphp_ce_ ## parent_class_name, # class_name, obj_ctor, funcs TSRMLS_CC);
00046
00047 #define REGISTER_ONPHP_PROPERTY(class_name, prop_name, prop_flags) \
00048 zend_declare_property_null(onphp_ce_ ## class_name, prop_name, strlen(prop_name), prop_flags TSRMLS_CC);
00049
00050 #define REGISTER_ONPHP_PROPERTY_BOOL(class_name, prop_name, bool, prop_flags) \
00051 zend_declare_property_bool(onphp_ce_ ## class_name, prop_name, strlen(prop_name), bool, prop_flags TSRMLS_CC);
00052
00053 #define REGISTER_ONPHP_CLASS_CONST_LONG(class_name, const_name, value) \
00054 zend_declare_class_constant_long(onphp_ce_ ## class_name, const_name, strlen(const_name), (long) value TSRMLS_CC);
00055
00056 #define ONPHP_READ_PROPERTY(class, property) \
00057 zend_read_property(Z_OBJCE_P(class), class, property, strlen(property), 1 TSRMLS_CC)
00058
00059 #define ONPHP_UPDATE_PROPERTY(class, property, value) \
00060 zend_update_property(Z_OBJCE_P(class), class, property, strlen(property), value TSRMLS_CC)
00061
00062 #define ONPHP_UPDATE_PROPERTY_BOOL(class, property, value) \
00063 zend_update_property_bool(Z_OBJCE_P(class), class, property, strlen(property), value TSRMLS_CC)
00064
00065 #define ONPHP_UPDATE_PROPERTY_LONG(class, property, value) \
00066 zend_update_property_long(Z_OBJCE_P(class), class, property, strlen(property), value TSRMLS_CC)
00067
00068 #define ONPHP_METHOD(class_name, function_name) \
00069 PHP_METHOD(onphp_ ## class_name, function_name)
00070
00071 #define ONPHP_ARGINFO_ONE \
00072 ZEND_BEGIN_ARG_INFO(arginfo_one, 0) \
00073 ZEND_ARG_INFO(0, first) \
00074 ZEND_END_ARG_INFO()
00075
00076 #define ONPHP_ARGINFO_ONE_REF \
00077 ZEND_BEGIN_ARG_INFO(arginfo_one_ref, 0) \
00078 ZEND_ARG_INFO(1, value) \
00079 ZEND_END_ARG_INFO() \
00080
00081 #define ONPHP_ARGINFO_TWO \
00082 ZEND_BEGIN_ARG_INFO(arginfo_two, 0) \
00083 ZEND_ARG_INFO(0, first) \
00084 ZEND_ARG_INFO(0, second) \
00085 ZEND_END_ARG_INFO()
00086
00087 #define ONPHP_ARGINFO_THREE \
00088 ZEND_BEGIN_ARG_INFO(arginfo_three, 0) \
00089 ZEND_ARG_INFO(0, first) \
00090 ZEND_ARG_INFO(0, second) \
00091 ZEND_ARG_INFO(0, third) \
00092 ZEND_END_ARG_INFO()
00093
00094 #define onphp_empty_object zend_object
00095
00096 extern void onphp_empty_object_free_storage(void *object TSRMLS_DC);
00097 extern zend_object_value onphp_empty_object_spawn(
00098 zend_class_entry *class_type,
00099 onphp_empty_object **object TSRMLS_DC
00100 );
00101 extern zend_object_value onphp_empty_object_new(
00102 zend_class_entry *class_type TSRMLS_DC
00103 );
00104
00105 #endif