9

私は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!"); 
}

...だから私は学びました:

  1. 関数名は常に小文字にする必要があります
  2. 文字列の長さに関しては、PHP のソース コードを確認することをお勧めします (zend_call_method内部で +1 が追加されます)。

私は C は初めてですが、PHP コード ベースは多くの点で複雑すぎると思います。

これが他の誰かに役立つことを願っています!

4

0 に答える 0