RE: [PHP-DEV] RE: Re: How do I register a constructor in PHP (C code)

From: Date: Wed, 26 Sep 2001 11:32:18 +0000
Subject: RE: [PHP-DEV] RE: Re: How do I register a constructor in PHP (C code)
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-66642@lists.php.net to get a copy of this message
Thank you for the example. Is working. I was figure out what was the problem: INIT_CLASS_ENTRY(rt66class_class_entry, "RT66Class", /* here */ php_rt66class_class_functions); writing "RT66Class" do not work, but writing "rt66class" is working!!! Many thanks for your help, Emanuel Dejanu Writing an PHP extension is a real adventure. P.S. I also write very pour english so sorry for my mistakes. > -----Original Message----- > From: Hansuck Jo [mailto:sizer@systong.co.kr] > Sent: Wednesday, September 26, 2001 1:04 PM > To: edejanu@route66.ro > Subject: Re: [PHP-DEV] RE: Re: How do I register a > constructor in PHP (C code) > > > Hm.. attachement file is my full source.. > > To compile: > tar xzf scl.tgz > mv scl any_path/php-4.0.6/ext > cd php-4.0.6 > rm configure config.cache > ./buildconf > ./confgure --with-scl > make > > > To Test: > ./php -q ext/scl/scl.php > > > Testing Results: > Object Created. > Subojbect Created. > > > PS. I can't speak English... ^^;; > but I can readonly English... (You understand?? ^^;;) > > PS. I have 64M DRAM cylix 166MHz.. TT > PHP 4.0.6, Wow-Linux 7.1 (Redhat 7.1 compat...) > No Apache.. (I compile CGI mode) > > > Emanuel Dejanu wrote: > > >tr(/PHP_/ZEND_/) > >and still do not work. I have compared your example with my > >code and no difference found on it. > > > >Have you any other suggestions. > > > >I really need the constructor and I can not do it. > > > >Best regards, > > > >Emanuel Dejanu > > > >P.S. I run Apache 1.3.20 PHP 4.0.6 Linux 2.2.18-SMP SuSE 7.1 > >on Dual Pentium III 800 MHz (712 MB RAM) machine. > > > >>-----Original Message----- > >>From: Hansuck Jo [mailto:sizer@systong.co.kr] > >>Sent: Wednesday, September 26, 2001 11:02 AM > >>To: php-dev@lists.php.net > >>Subject: Re: [PHP-DEV] RE: Re: How do I register a > >>constructor in PHP (C code) > >> > >> > >>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 > >>>> > >>>> > >> > >> > >>-- > >>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 (#66642) next »