我正在编写一个 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!");
}
...所以我了解到:
- 函数名必须始终为小写
- 当涉及到字符串长度时,您最好查看 PHP 的源代码(在
zend_call_method
内部添加 +1)。
虽然我是 C 新手,但我认为 PHP 代码库在很多方面都过于复杂了!
希望这对其他人有帮助!