2012-12-31 17 views
9

CPP'de temel olarak çok basit bir sınıfı silen php5.4 için bir uzantı yazmaya çalışıyorum.PHP 5.4 için bir C++ uzantısı yazma, örnek kod geçersiz

Bu eğitim amaçlıdır. Ben php5.4 bunu yapmak için bir yol bulmak

php5.3

bunu nasıl yapılacağına ilişkin belgelere bulurum

den değişti? Veya daha da iyisi, kod örneği, CPP sınıflarını örten ve php5.4

'da çalışan herhangi bir başka uzantı. Örneğin, eskiden çalıştığı ve artık kullanılmayan. 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 *)); yapı örneği type olarak başarısız olur çizgi Alındığı (öyle unuttum tanımlı) artık üye default_properties

+3

Muhtemelen en iyi kaynak PHP5.4 kaynak kodu –

+0

@ Mark Baker Belirli varsa, CPP büyük değilim geçerli:

Özellikle, zend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *)); örnek ele almak, bunlar aşağıdaki önermek zaten bunu yapan uzantı, büyük yardım olurdu. Aksi halde, evet, ben tam olarak ne öneririm? –

+0

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

cevap

6

bu PHP wiki sayfa yardımı hakkında bilgi mu var?

#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