2012-12-31 7 views
9

私は基本的にCPPで非常に単純なクラスをラップするphp5.4用の拡張を作成しようとしています。PHP 5.4用のC++拡張を書くと、サンプルコードは廃止されました

これは教育目的のためのものです。私はphp5.4でそれを行うための方法を見つける

はPHP5.3

私はそれを行う方法についてのドキュメントを見つけるん

から変更されましたか?コードサンプル、CPPクラスをラップしてphp5.4で動作する他の拡張モジュール

たとえば、以前は何をしていたのですか? http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/

zend_object_value car_create_handler(zend_class_entry *type TSRMLS_DC) 
{ 
    zval *tmp; 
    zend_object_value retval; 

    car_object *obj = (car_object *)emalloc(sizeof(car_object)); 
    memset(obj, 0, sizeof(car_object)); 
    obj->std.ce = type; 

    ALLOC_HASHTABLE(obj->std.properties); 
    zend_hash_init(obj->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0); 
    zend_hash_copy(obj->std.properties, &type->default_properties, 
     (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *)); 

    retval.handle = zend_objects_store_put(obj, NULL, 
     car_free_storage, NULL TSRMLS_CC); 
    retval.handlers = &car_object_handlers; 

    return retval; 
} 

から取られたライン zend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *)); は、構造インスタンスtypeとして失敗します(それが定義だ忘れては)もはやメンバーdefault_properties

+3

おそらくあなたの最高のリソースはPHP5.4のソースコード –

+0

@マークベイカーある特定がある場合、私は、CPPに素晴らしいではありませんよ既にそれをしている拡張機能は大きな助けになるでしょう。それ以外の場合は、うん、まあまあ何を提案する –

+0

http://php.net/manual/en/internals2.structure.php? –

答えて

6

このPHP wikiページのヘルプ情報をいていませんか?

具体的には、あなたのzend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *));例に対処するために、彼らは次のことをお勧め:

#if PHP_VERSION_ID < 50399 
    zend_hash_copy(tobj->std.properties, &(class_type->default_properties), 
     (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval*)); 
#else 
    object_properties_init(&tobj->std, class_type); 
#endif 
関連する問題