78-对象属性读写
来源:互联网 发布:淘宝的windows激活码 编辑:程序博客网 时间:2024/06/05 05:16
78-对象属性读写
这一节主要描述与对象属性有关的东西。有关如何对它进行定义的操作我们已经在上一章中描述过了,这里不再叙述,只讲对其的操作。
读取对象的属性
ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC);ZEND_API zval *zend_read_static_property(zend_class_entry *scope, char *name, int name_length, zend_bool silent TSRMLS_DC);
zend_read_property函数用于读取对象的属性,而zend_read_static_property则用于读取静态属性。可以看出,静态属性是直接保存在类上的,用具体的对象无关。
silent参数:
- 0: 如果属性不存在,则抛出一个notice错误。
- 1: 如果属性不存在,不报错。
如果所查的属性不存在,那么此函数将返回IS_NULL类型的zval。
更新对象的属性:
ZEND_API void zend_update_property(zend_class_entry *scope, zval *object, char *name, int name_length, zval *value TSRMLS_DC);ZEND_API int zend_update_static_property(zend_class_entry *scope, char *name, int name_length, zval *value TSRMLS_DC);
zend_update_property用来更新对象的属性,zend_update_static_property用来更新类的静态属性。如果对象或者类中没有相关的属性,函数将自动的添加上。
读写对象与类属性的实例
假设我们已经在扩展中定义好下面的类:
class baby{ public $age; public static $area; public function __construct($age, $area) { $this->age = $age; self::$area = $area; var_dump($this->age, self::$area); }}ZEND_METHOD(baby, __construct){ zval *age, *area; zend_class_entry *ce; ce = Z_OBJCE_P(getThis()); if( zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &age, &area) == FAILURE ) { printf("Error\n"); RETURN_NULL(); } zend_update_property(ce, getThis(), "age", sizeof("age")-1, age TSRMLS_CC); zend_update_static_property(ce, "area", sizeof("area")-1, area TSRMLS_CC); age = NULL; area = NULL; age = zend_read_property(ce, getThis(), "age", sizeof("age")-1, 0 TSRMLS_DC); php_var_dump(&age, 1 TSRMLS_CC); area = zend_read_static_property(ce, "area", sizeof("area")-1, 0 TSRMLS_DC); php_var_dump(&area, 1 TSRMLS_CC);}
一些其它的快捷函数
ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, char *name, int name_length TSRMLS_DC);ZEND_API void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC);ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC);ZEND_API void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC);ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, char *name, int name_length, const char *value TSRMLS_DC);ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zval *object, char *name, int name_length, const char *value, int value_length TSRMLS_DC);ZEND_API int zend_update_static_property_null(zend_class_entry *scope, char *name, int name_length TSRMLS_DC);ZEND_API int zend_update_static_property_bool(zend_class_entry *scope, char *name, int name_length, long value TSRMLS_DC);ZEND_API int zend_update_static_property_long(zend_class_entry *scope, char *name, int name_length, long value TSRMLS_DC);ZEND_API int zend_update_static_property_double(zend_class_entry *scope, char *name, int name_length, double value TSRMLS_DC);ZEND_API int zend_update_static_property_string(zend_class_entry *scope, char *name, int name_length, const char *value TSRMLS_DC);ZEND_API int zend_update_static_property_stringl(zend_class_entry *scope, char *name, int name_length, const char *value, int value_length TSRMLS_DC);
0 0
- 78-对象属性读写
- php对象属性读写
- Literacy 快速反射读写对象属性,字段
- ACCESS数据库中Field对象的caption属性读写
- 对象流读写对象
- C#定义属性-读写属性
- linux多线程-----同步对象(互斥量、读写锁、条件变量)的属性
- js对象的继承以及公有私有属性的定义和读写
- java 读写属性文件
- innerHTML的读写属性
- 改变读写属性
- 读写属性文件
- 属性文件读写工具
- java读写属性配置文件
- 读写锁属性
- linux读写属性节点
- java属性文件读写
- 属性读写操作注意事项
- 直接以管理员身份运行bat代码
- vs与opencv配置原理要点
- radio的选中
- Android中的二维码生成与扫描
- 图片转PDF
- 78-对象属性读写
- 关于JSON返回日期格式化的解决方案
- scala根据运行环境加载配置文件
- mybatis 不识别>= <=号
- 基于Bootstrap的jQuery form表单验证插件
- GUI for git|SourceTree|入门基础
- 文章标题
- 中英文字符串被截断导致乱码
- Android 3D画廊采用Gallery实现无限循环、自动轮播