Re: RE: Re: How do I register a constructor in PHP (C code)

From: Date: Wed, 26 Sep 2001 08:01:44 +0000
Subject: Re: RE: Re: How do I register a constructor in PHP (C code)
References: 1 2  Groups: php.dev 
Request: Send a blank email to php-dev+get-66625@lists.php.net to get a copy of this message
hm... ZEND_* functions instead PHP_* functions. This is sample code..(of course. You must include zend.h etc..) static zend_function_entry scl_functions[] = { {NULL, NULL, NULL} }; zend_module_entry scl_module_entry = { "scl", scl_functions, ZEND_MINIT(scl), NULL, NULL, NULL, ZEND_MINFO(scl), STANDARD_MODULE_PROPERTIES }; zend_class_entry scl_object_class_entry; zend_function_entry scl_object_functions[] = { ZEND_FALIAS(object, object_init, NULL) {NULL, NULL, NULL} }; ZEND_FUNCTION(object_init) { zval *obj; obj = getThis(); if (obj) { if (ZEND_NUM_ARGS() != 0) { ZEND_WRONG_PARAM_COUNT(); } zend_printf("Object Create."); RETURN_TRUE; } else { zend_error(E_WARNING, "This can't excute in Class Method"); RETURN_FALSE; } } ZEND_MINIT_FUNCTION(scl) { INIT_CLASS_ENTRY(scl_object_class_entry, "object", scl_object_functions); zend_register_internal_class(&scl_object_class_entry); } Emanuel Dejanu wrote: > I have write using the init but still do not work. > > Any other ideea. > > Best regards, > > Emanuel Dejanu > > > >>-----Original Message----- >>From: Hansuck Jo [mailto:""sizer"@.php.net] >>Sent: Tuesday, September 25, 2001 6:31 PM >>To: php-dev@lists.php.net >>Subject: [PHP-DEV] Re: How do I register a constructor in PHP (C code) >> >> >>You use rt66clsss_init() instead of rt66class_contstructor(). >>may be, it's will work. :) >> >> >>Emanuel Dejanu wrote: >> >> >>>I write an extension and I want to register a new class >>>but I can not get my function to be registered as a constructor. >>> >>>ex: >>>PHP_FUNCTION(rt66class_constructor); >>>static zend_function_entry php_rt66class_class_functions[] = >>>{ >>> PHP_FALIAS(RT66Class, rt66class_constructor, NULL) >>>}; >>> >>>PHP_MINIT_FUNCTION(rt66util) >>>{ >>> zend_class_entry rt66class_class_entry; >>> INIT_CLASS_ENTRY(rt66class_class_entry, "RT66Class", >>>php_rt66class_class_functions); >>> RT66Class_class_entry_ptr = >>>zend_register_internal_class(&rt66class_class_entry); >>> >>> return SUCCESS; >>>} >>> >>>PHP_FUNCTION(rt66class_constructor) >>>{ >>> ZEND_PUTS("RT66Class Contructor"); >>>} >>> >>> >>>----- >>><?php >>> dl(myext.so); >>> $myvar = RT66Class(); >>>?> >>> >>>nothing appear on the screen. >>> >>>Please tell me how can I make it to work. >>> >>>Many thanks, >>> >>>Emanuel Dejanu >>> >>> >>> >>>>-----Original Message----- >>>>From: Andy [mailto:andy@php.net] >>>>Sent: Wednesday, August 01, 2001 3:27 PM >>>>To: php-dev@lists.php.net >>>>Subject: Fwd: FW: [PHP-DEV] print_r >>>> >>>> >>>> >>>> >>>>---------- Forwarded Message ---------- >>>>Subject: FW: [PHP-DEV] print_r >>>>Date: Wed, 1 Aug 2001 08:19:09 +0300 >>>>From: "Emanuel Dejanu" <edejanu@route66.ro> >>>> >>>> >>>>Sorry to forward this to you but I really have problems in >>>>printing a doubled linked class. >>>>Can you take a look at the following message and give me >>>>an answer. >>>> >>>>Thanks, >>>> >>>>Emanuel Dejanu >>>> >>>>-----Original Message----- >>>>From: Emanuel Dejanu [mailto:edejanu@route66.ro] >>>>Sent: Tuesday, July 31, 2001 9:22 AM >>>>To: php-dev@lists.php.net >>>>Subject: [PHP-DEV] print_r >>>> >>>> >>>> >>>>Hi, >>>> >>>>Is there a posibility to print an object but to not print >>>> >>some fields. >> >>>>If I use print_r he will print all variabiles from my object, >>>>but I want on >>>>variabile to not be printed. I do not want to write my own function. >>>>Ex. >>>> >>>>class Node { >>>> var $name; >>>> var $parent = '/' >>>> var $children = array(); >>>> function Node($name, &$parent) { >>>> $this->parent = &$parent; >>>> $this->name = $name; >>>> } >>>>} >>>> >>>>$rootNode = new Node('root', ''); >>>>array_push($rootNode->children, new Node('child1', $rootNode)); >>>>$child1Node = &$rootNode->children[0]; >>>>array_push($child1Node->children, new Node('child1', $child1Node)); >>>> >>>>print_r($rootNode); >>>> >>>>will print make a recursivity. What will be nice is to >>>> >>allow that some >> >>>>variabiles to not >>>>be printed like this: >>>> >>>>class Node { >>>> var $name; >>>> var $__parent = '/' >>>> var $children = array(); >>>> function Node($name, &$parent) { >>>> $this->__parent = &$parent; >>>> $this->name = $name; >>>> } >>>>} >>>> >>>>..... /* add the root and childrens */ >>>> >>>>print_r($rootNode); >>>> >>>>will print now the corret tree. >>>> >>>>Bellow you find the only modification that need to be done >>>>for this to work. >>>> >>>>Best regards, >>>> >>>>Emanuel Dejanu >>>> >>>> >>>>File: Zend/zend.c >>>> >>>>static void print_hash(HashTable *ht, int indent) >>>>{ >>>> zval **tmp; >>>> char *string_key; >>>> HashPosition iterator; >>>> unsigned long num_key, str_len; >>>> int i, key_type; /****** HERE *****/ >>>> >>>> for (i=0; i<indent; i++) { >>>> ZEND_PUTS(" "); >>>> } >>>> ZEND_PUTS("(\n"); >>>> indent += PRINT_ZVAL_INDENT; >>>> zend_hash_internal_pointer_reset_ex(ht, &iterator); >>>> while (zend_hash_get_current_data_ex(ht, (void **) >>>>&tmp, &iterator) == >>>>SUCCESS) { >>>> >>>> >>>>/******** HERE **************/ >>>> >>>> key_type = zend_hash_get_current_key_ex(ht, >>>>&string_key, &str_len, >>>>&num_key, 0, &iterator); >>>> if (key_type == HASH_KEY_IS_STRING) >>>> if (string_key[0] == '_' && >>>>string_key[1] == '_') continue; >>>> >>>> >>>>/******* HERE **************/ >>>> >>>> >>>> for (i=0; i<indent; i++) { >>>> ZEND_PUTS(" "); >>>> } >>>> ZEND_PUTS("["); >>>> switch (key_type) { >>>> case HASH_KEY_IS_STRING: >>>> ZEND_PUTS(string_key); >>>> break; >>>> case HASH_KEY_IS_LONG: >>>> zend_printf("%ld",num_key); >>>> break; >>>> } >>>> ZEND_PUTS("] => "); >>>> zend_print_zval_r(*tmp, indent+PRINT_ZVAL_INDENT); >>>> ZEND_PUTS("\n"); >>>> zend_hash_move_forward_ex(ht, &iterator); >>>> } >>>> indent -= PRINT_ZVAL_INDENT; >>>> for (i=0; i<indent; i++) { >>>> ZEND_PUTS(" "); >>>> } >>>> ZEND_PUTS(")\n"); >>>>} >>>> >>>> >>>>-- >>>>PHP Development Mailing List >>>><http://www.php.net/> >>>>To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net >>>>For additional commands, e-mail: php-dev-help@lists.php.net >>>>To contact the list administrators, e-mail: >>>>php-list-admin@lists.php.net >>>>------------------------------------------------------- >>>> >>>>-- >>>>PHP Development Mailing List >>>><http://www.php.net/> >>>>To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net >>>>For additional commands, e-mail: php-dev-help@lists.php.net >>>>To contact the list administrators, e-mail: >>>>php-list-admin@lists.php.net >>>> >>>> >>>> >> >> >>-- >>PHP Development Mailing List <http://www.php.net/> >>To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net >>For additional commands, e-mail: php-dev-help@lists.php.net >>To contact the list administrators, e-mail: >>php-list-admin@lists.php.net >> >> >

« previous php.dev (#66625) next »