I read README.SUBMITING_PATCH and attached the patch as specified. Cristiano Duarte
"Cristiano Duarte" <[EMAIL PROTECTED]> escreveu na mensagem news:[EMAIL PROTECTED] > >"Marcus BöRger" <[EMAIL PROTECTED]> escreveu na mensagem > news:[EMAIL PROTECTED] > > > > The patch doesn't compile (always use confugure --enable-maintainer-zts). > > Then you assume that every class has a function to_string(), this is not > what > > we want. > > > > -- > > Best regards, > > Marcus mailto:[EMAIL PROTECTED] > > > > Marcus, > > 1. I tried to learn how ZE2 works in 5 hours to write this patch... Sorry. I > even didn't know how ZE1 works... > 2. First I tried with get_method handler but then I didn't know how to call > the method with the resulting zend_function union. So I decided to use > "call_user_function" directly since if the method doesn't exist FALSE will > be returned and the default operation will be done. The __destruct method > works the same way... > 3. Classes that don't implement the to_string() method will have the default > PHP behavior. They don't need to implement to_string(). The __destruct > method works the same way... > 4.I compiled it with --enable-maintainer-zts and it worked. It compiles with > or without --enable-maintainer-zts. > > I'm using PHP5-200308030330, with the CLI sapi, and now the configure line > is: > ./configure --enable-debug --enable-maintainer-zts --enable-cli > > Best regards, > > Cristiano Duarte > > PS: the patch file needs to be applied inside ./Zend > > > > Hello Cristiano, > > > > Sunday, August 3, 2003, 5:33:25 AM, you wrote: > > > > CD> I made a patch to the latest PHP5-CVS wich implements this hook. I > think > > CD> it's useful to make a meaningful object stringfied value. > > > > CD> Can anyone verify it and maybe commit it to CVS ? > > > > CD> --- zend.c 2003-07-30 14:07:36.000000000 -0300 > > CD> +++ zend.c.new 2003-08-03 00:27:43.000000000 -0300 > > CD> @@ -227,10 +227,24 @@ > > CD> if (expr->value.obj.handlers->cast_object) { > > CD> TSRMLS_FETCH(); > > CD> expr->value.obj.handlers->cast_object(expr, expr_copy, IS_STRING, > 0 > > CD> TSRMLS_CC); > > CD> } else { > > - expr_copy->>value.str.val = (char *) emalloc(sizeof("Object id #")-1 > + > > CD> MAX_LENGTH_OF_LONG); > > - expr_copy->>value.str.len = sprintf(expr_copy->value.str.val, "Object > id > > #%ld", (long)expr->>value.obj.handle); > > CD> + //call to_string method > > CD> + zval *fname, *retval; > > CD> + MAKE_STD_ZVAL(fname); > > CD> + ZVAL_STRING(fname, "to_string", 1); > > CD> + TSRMLS_FETCH(); > > CD> + if (call_user_function_ex(NULL, &expr, fname, &retval, 0, NULL, > 0, > > CD> NULL TSRMLS_CC) == SUCCESS) { > > CD> + if (Z_TYPE_P(retval) != IS_STRING) { > > CD> + convert_to_string(retval); > > CD> + } > > CD> + ZVAL_STRINGL(expr_copy, Z_STRVAL_P(retval), > Z_STRLEN_P(retval), > > CD> 1); > > CD> + zval_ptr_dtor(&retval); > > CD> + } else { > > CD> + Z_STRVAL_P(expr_copy) = (char *) > > CD> emalloc(sizeof("Object id #")-1 + MAX_LENGTH_OF_LONG); > > CD> + Z_STRLEN_P(expr_copy) = > > CD> sprintf(Z_STRVAL_P(expr_copy), "Object id #%ld", > > CD> (long)Z_OBJ_HANDLE_P(expr)); > > CD> + } > > CD> + zval_ptr_dtor(&fname); > > CD> } > > CD> #if 0 > > CD> /* FIXME: This might break BC for some people */ > > CD> expr_copy->value.str.len = sizeof("Object")-1; > > > > > > CD> Thanx, > > > > CD> Cristiano Duarte. > > > > CD> "Cristiano Duarte" <[EMAIL PROTECTED]> escreveu na mensagem > > CD> news:[EMAIL PROTECTED] > > >> Sorry guys, > > >> > > >> > $o = new xxx(); > > >> should be $o = new my_object(); > > >> > > >> And if there is a way to hook into zend_standard_class (stdClass) what > > CD> would > > >> make all objects inherit the to_string method, it would be great ! > > >> > > >> Cristiano Duarte > > >> > > >> "Cristiano Duarte" <[EMAIL PROTECTED]> escreveu na mensagem > > >> news:[EMAIL PROTECTED] > > >> > Hi internals, > > >> > > > >> > Is there a way to hook the cast_object handler in userspace ? What I > > CD> want > > >> is > > >> > a default "to_string" method called when I do something like: > > >> > > > >> > class my_object extends class_with_default_to_string_method { > > >> > private $value = "Hello"; > > >> > public function to_string() { //overhiding default to_string wich > > >> prints > > >> > "Object id #n" > > >> > return $this->value; > > >> > } > > >> > } > > >> > > > >> > $o = new my_object(); > > >> > echo $o; > > >> > > > >> > or: > > >> > > > >> > $o = new xxx(); > > >> > echo "My stringfied value is=$o"; > > >> > > > >> > Thanx, > > >> > > > >> > Cristiano Duarte > > >> > > > >> > > > >> > > >> > > > > > > > > begin 666 to_string.patch M/R!P:' M<W)C+RY214%$344N4U5"34E45$E.1U]0051#2"YS=W */R!P:' M M<W)C+UIE;F1%;F=I;F4Q"DEN9&5X.B!P:' M<W)C+UIE;F0O>F5N9"YC"CT] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T*4D-3(&9I;&4Z("]R97!O<VET;W)Y+UIE M;F1%;F=I;F4R+WIE;F0N8RQV"G)E=')I979I;F<@<F5V:7-I;VX@,2XR-#,* M9&EF9B M=2 M<C$N,C0S('IE;F0N8PHM+2T@<&AP+7-R8R]:96YD+WIE;F0N M8PDS,"!*=6P@,C P,R Q-CHQ,SHU,B M,# P, DQ+C(T,PHK*RL@<&AP+7-R M8R]:96YD+WIE;F0N8PDS($%U9R R,# S(#$Y.C4R.C(Q("TP,# P"D! ("TR M,[EMAIL PROTECTED]" K,C(X+#(R($! "B )"0D)5%-234Q37T9%5$-(*"D["B )"0D)97AP M<BT^=F%L=64N;V)J+FAA;F1L97)S+3YC87-T7V]B:F5C="AE>'!R+"!E>'!R M7V-O<'DL($E37U-44DE.1RP@,"!44U)-3%-?0T,I.PH@"0D)?2!E;'-E('L* M+0D)"0EE>'!R7V-O<'DM/G9A;'5E+G-T<BYV86P@/2 H8VAA<B J*2!E;6%L M;&]C*'-I>[EMAIL PROTECTED])J96-T(&ED(",B*2TQ("[EMAIL PROTECTED]/1E], M3TY'*3L*+0D)"0EE>'!R7V-O<'DM/G9A;'5E+G-T<BYL96X@/2!S<')I;G1F M*&5X<')?8V]P>2T^=F%L=64N<W1R+G9A;"P@(D]B:F5C="!I9" C)6QD(BP@ M*&QO;F<I97AP<BT^=F%L=64N;V)J+FAA;F1L92D["BL)"0D)(" O+V-A;&P@ M=&]?<W1R:6YG(&UE=&AO9 HK"0D)"2 @>G9A;" J9FYA;64L("IR971V86P[ M"BL)"0D)("!-04M%7U-41%]:5D%,*&9N86UE*3L**PD)"0D@(%I604Q?4U12 M24Y'*&9N86UE+" B=&]?<W1R:6YG(BP@,2D["BL)"0D)("!44U)-3%-?1D54 [EMAIL PROTECTED]@"BL)"0D)("!I9B H8V%L;%]U<V5R7V9U;F-T:6]N7V5X*$Y53$PL M("9E>'!R+"!F;F%M92P@)G)E='9A;"P@,"[EMAIL PROTECTED],3"P@,"[EMAIL PROTECTED],3"!44U)- M3%-?0T,I(#T](%-50T-%4U,I('L**PD)"0D@(" @(&EF("A:7U194$5?4"AR M971V86PI("$]($E37U-44DE.1RD@>PHK"0D)"0EC;VYV97)T7W1O7W-T<FEN M9RAR971V86PI.PHK"0D)"2 @(" @?0HK"0D)"2 @(" @6E9!3%]35%))3D=, M*&5X<')?8V]P>[EMAIL PROTECTED])604Q?4"AR971V86PI+"!:7U-44DQ%3E]0*')E M='9A;"DL(#$I.PHK"0D)"2 @(" @>G9A;%]P=')?9'1O<[EMAIL PROTECTED]<F5T=F%L*3L* M*PD)"0D@('[EMAIL PROTECTED]"BL@(" @(" @(" @(" @(" @(" @(" @(" @(" @ M(" @(" @(" @6E]35%)604Q?4"AE>'!R7V-O<'DI([EMAIL PROTECTED]&-H87(@[EMAIL PROTECTED] M;&QO8RAS:7IE;V8H(D]B:F5C="!I9" C(BDM,2 K($U!6%],14Y'5$A?3T9? M3$].1RD["BL@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @ M6E]35%),14Y?4"AE>'!R7V-O<'DI(#T@<W!R:6YT9BA:7U-44E9!3%]0*&5X M<')?8V]P>2DL(")/8FIE8W0@:60@(R5L9"(L("AL;VYG*5I?3T)*7TA!3D1, M15]0*&5X<'(I*3L**PD)"0D@('T**PD)"0D@('IV86Q?<'1R7V1T;W(H)F9N M86UE*3L*( D)"7T*("-I9B P"B )"0DO*B!&[EMAIL PROTECTED]&AI<R!M:6=H="!B ;<F5A:R!"0R!F;W(@<V]M92!P96]P;&[EMAIL PROTECTED] ` end -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php