我正在编写PHP扩展。从C代码我尝试在PHP代码中调用静态方法。
PHP方法如下所示:
<?php
class Model {
static method GetModelById($id) { ... }
}
?>
C中的调用如下所示:
if( call_user_function_ex(
&((*ce)->function_table),
NULL, &fname, &retval_ptr,
1, func_params, 0, NULL TSRMLS_CC
) == SUCCESS
){
// do some stuff here ...
}
...所有传递的参数都应包含适当的值。这里奇怪的是:如果我编译我的扩展对PHP 5.2代码工作正常,如果我对PHP 5.3编译,方法调用失败,没有错误消息。
我也试过zend_call_method
,但两个版本都没有成功。
任何人都可以给我一个提示吗?你如何从C调用静态方法?
提前致谢!
修改
对不起,伙计们,我通过zend_call_method
这样工作:
if( zend_call_method( NULL, *ce, NULL,
"getmodelbyid",
strlen("getmodelbyid"),
&retval_ptr, 1, p1,
NULL TSRMLS_CC ) == FAILURE) {
php_printf("gosh!");
}
else {
php_printf("yep!");
}
...所以我学到了:
zend_call_method
在内部添加+1)。虽然我是C的新手,但我认为PHP代码库在很多方面都过度编译了!
希望这有助于其他人!