gpt4 book ai didi

c - 如何从 PHP 扩展中克隆对象

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:59 26 4
gpt4 key购买 nike

我正在尝试在我的扩展中实现原型(prototype)设计模式。如何从 zval* 克隆一个对象。是否有等同于 userland clone 运算符的 zend 函数?

更新

我编写了以下用于克隆对象的函数。不确定是否有更好的方法。

/**
* Clones an object from src to dest
*/
static int php_custom_clone(zval *src, zval *dest TSRMLS_DC) {
zend_class_entry *ce;
zend_object_clone_obj_t clone_call;

ce = Z_OBJCE_P(src);
clone_call = Z_OBJ_HT_P(src)->clone_obj;

if (!clone_call) {
if (ce) {
zend_throw_exception_ex(Custom_Exception_ce_ptr, 0 TSRMLS_CC, "Trying to clone an uncloneable object of class %s", ce->name);
} else {
zend_throw_exception_ex(Custom_Exception_ce_ptr, 0 TSRMLS_CC, "Trying to clone an uncloneable object");
}
} else {
if (!EG(exception)) {
Z_OBJVAL_P(dest) = clone_call(src TSRMLS_CC);
Z_TYPE_P(dest) = IS_OBJECT;
Z_SET_REFCOUNT_P(dest, 1);
// Z_SET_ISREF_P(dest);
if (EG(exception)) {
zval_ptr_dtor(&dest);
} else {
return 1;
}
}
}
return 0;
}

最佳答案

通用克隆方法...

zend_object_value val =  zend_objects_clone_obj(zval *zobject TSRMLS_DC);

关于c - 如何从 PHP 扩展中克隆对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30003525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com