私は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 コード ベースは多くの点で複雑すぎると思います。
これが他の誰かに役立つことを願っています!