我正在写一个PHP扩展.从C代码我尝试在PHP代码中调用静态方法.
PHP方法如下所示:
<?php
class Model {
static method GetModelById($id) { ... }
}
?>
Run Code Online (Sandbox Code Playgroud)
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 ...
}
Run Code Online (Sandbox Code Playgroud)
...所有传递的参数都应包含适当的值.这里奇怪的是:如果我编译我的扩展对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!");
}
Run Code Online (Sandbox Code Playgroud)
......所以我学到了:
zend_call_method内部加+1).虽然我是C的新手,但我认为PHP代码库在很多方面都过度编译了!
希望这有助于其他人!