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

Reply via email to