您好,欢迎访问一九零五行业门户网

php-extension - php扩展中实例化对象并调用方法

使用函数宏call_user_function调用类中的方法:
如下:
zend_function(call_say){//调用myclass中的say方法zval *obj,*method_construct,*method_say,*name,*age;int name_len,age_len;zend_uint param_count=zend_num_args();zval *params[param_count];make_std_zval(obj);make_std_zval(method_construct);make_std_zval(method_say);object_init_ex(obj, people_ce);zval_stringl(method_construct,__construct,strlen(__construct),1);zval_stringl(method_say,say,strlen(say),1);//获取参数if(zend_parse_parameters(param_count tsrmls_cc,ss,&name,&name_len,&age,&age_len)==failure){ wrong_param_count;}params[0]=name;params[1]=age;//__construct中存在参数 call_user_function(null, &obj, method_construct, null,param_count,params tsrmls_cc); call_user_function(null, &obj, method_say,null,0,null tsrmls_cc);zval_ptr_dtor(&obj);zval_ptr_dtor(&method_construct);zval_ptr_dtor(&method_say);return;

}
这个call_user_function好像用错了样的。执行出现 segmentation fault ! 哪位大神帮看下!
我想要的效果:
类中的两个方法:
public function __construct($name,$age){ $this->name=$name; $this->age=$age; } public function say(){ echo 我叫{$this->name},我今年{$this->age}岁了; }

补充:自己解决了
retval没有设置就出现这个错误:
首先定义:zval *retval;
分配内存:make_std_zval(retval)
call_user_function(null, &obj, method_say, retval, 0, null tsrmls_cc)

segmentfault的人气好像不行。。。。
回复内容: 使用函数宏call_user_function调用类中的方法:
如下:
zend_function(call_say){//调用myclass中的say方法zval *obj,*method_construct,*method_say,*name,*age;int name_len,age_len;zend_uint param_count=zend_num_args();zval *params[param_count];make_std_zval(obj);make_std_zval(method_construct);make_std_zval(method_say);object_init_ex(obj, people_ce);zval_stringl(method_construct,__construct,strlen(__construct),1);zval_stringl(method_say,say,strlen(say),1);//获取参数if(zend_parse_parameters(param_count tsrmls_cc,ss,&name,&name_len,&age,&age_len)==failure){ wrong_param_count;}params[0]=name;params[1]=age;//__construct中存在参数 call_user_function(null, &obj, method_construct, null,param_count,params tsrmls_cc); call_user_function(null, &obj, method_say,null,0,null tsrmls_cc);zval_ptr_dtor(&obj);zval_ptr_dtor(&method_construct);zval_ptr_dtor(&method_say);return;

}
这个call_user_function好像用错了样的。执行出现 segmentation fault ! 哪位大神帮看下!
我想要的效果:
类中的两个方法:
public function __construct($name,$age){ $this->name=$name; $this->age=$age; } public function say(){ echo 我叫{$this->name},我今年{$this->age}岁了; }

补充:自己解决了
retval没有设置就出现这个错误:
首先定义:zval *retval;
分配内存:make_std_zval(retval)
call_user_function(null, &obj, method_say, retval, 0, null tsrmls_cc)

segmentfault的人气好像不行。。。。
学习了,刚好用到
我比你更气人,我 retval 也没问题,现在还在查错中。。。
其它类似信息

推荐信息