2012-12-31 16 views
9

मैं php5.4 के लिए एक एक्सटेंशन लिखने की कोशिश कर रहा हूं जो मूल रूप से सीपीपी में एक बहुत ही सरल वर्ग को लपेटता है।PHP 5.4 के लिए सी ++ एक्सटेंशन लिखना, उदाहरण कोड अप्रचलित

यह शिक्षा उद्देश्यों के लिए है।

मैं जिस तरह से php5.4 में यह करने के लिए लगता है php5.3

मैं इसे कैसे करना है पर प्रलेखन कहां ढूंढूं से बदल गया है? या इससे भी बेहतर, कोड उदाहरण, कोई अन्य एक्सटेंशन जो सीपीपी कक्षाओं को लपेटता है और 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

@Mark बेकर मैं सीपीपी में महान नहीं कर रहा हूँ, अगर वहाँ एक विशिष्ट है विस्तार जो पहले से ही करता है, बहुत मददगार होगा। अन्यथा, हाँ, मैं ठीक उसी तरह करता हूं जो आप –

+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 
संबंधित मुद्दे