2012-12-31 21 views
9

Próbuję napisać rozszerzenie dla php5.4, które zasadniczo owija bardzo prostą klasę w CPP.Pisząc rozszerzenie C++ dla PHP 5.4, przykładowy kod jest przestarzały

To jest w celach edukacyjnych.

znajdę sposób to zrobić w php5.4 zmieniła od php5.3

Gdzie mogę znaleźć dokumentację na temat jak to zrobić? Lub jeszcze lepiej, przykład kodu, każde inne rozszerzenie, które owija klasy CPP i działa w php5.4

Na przykład, co kiedyś działało i już nie jest. Zrobione z 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; 
} 

Linia zend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *)); zawiedzie jako przykład struktury type (zapomniałem to definicja) nie ma już członkiem default_properties

+3

Prawdopodobnie najlepszym źródłem jest kod źródłowy PHP5.4 –

+0

@Mark Baker Nie jestem świetny w KPP, jeśli istnieje szczególne rozszerzenie, które już to robi, byłoby wielką pomocą. W przeciwnym razie, tak, zrób dokładnie to, co sugerujesz –

+0

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

Odpowiedz

6

Czy informacje na tej stronie PHP wiki pomoc?

szczególności, aby rozwiązać swój przykład zend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *));, sugerują one następujące:

#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