Ahh yes, I've been bitten by this limitation a few times, quite agravating. I would definitly like to have this work. Shane
phpsurf wrote: > the problem is that if you define some function : > > function someFunc(&myParam) { > ... > } > > then you can call : > someFunc($someVar); > > but not : > define("MY_CONSTANT", 0); > someFunc(MY_CONSTANT); > > the goal is not to pass a constant by reference, but to be allowed to > (exceptionnaly) pass a constant as a parameter to a function that was > designed to receive parameters by reference. > > and this could also let people define default values for params and still > have them passed by reference ... > > >>-----Original Message----- >>From: Andi Gutmans [mailto:[EMAIL PROTECTED]] >>Sent: mercredi 29 mai 2002 17:26 >>To: Stig S. Bakken; Jason T. Greene >>Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED] >>Subject: [PHP-DEV] Re: [Zend Engine 2] Re: [PHP-DEV] [RESENT] [PATCH] >>Allow constants / expressions to be passed by reference] >> >> >>I don't see any reason to allow passing non-variables by reference. >>It is semantically incorrect. >> >>Andi >> >>At 09:40 29/05/2002 +0200, Stig S. Bakken wrote: >> >>>If this patch doesn't break anything, and it doesn't give us any >>>difficulties with ZE2 or major design issues, I'm +1. >>> >>> - Stig >>> >>>On Tue, 2002-05-28 at 21:12, Jason T. Greene wrote: >>> >>>>Due to this patch being sent during the msession discussion, >>> >>it has not >> >>>>been noticed, so I am resending. >>>> >>>> >>>>-Jason >>>>---- >>>> >>> >>>>From: Jason Greene <[EMAIL PROTECTED]> >>>>To: [EMAIL PROTECTED] >>>>Cc: [EMAIL PROTECTED], [EMAIL PROTECTED] >>>>Subject: [PHP-DEV] [PATCH] Allow constants / expressions to be passed >>> >>>by reference >>> >>>>Date: 25 May 2002 02:18:52 -0500 >>>> >>>>Problem >>>>------- >>>> >>>>There are some scenarios where a function requires the >>> >>ability to modify >> >>>>parameters that may also be optional. Optional parameters work well, >>>>except in the scenario where all of the pass by reference >>> >>parameters can >> >>>>be optional. ex the socket_select() function. Since select is >>>>argument-result, all three arrays that are taken as input >>> >>must be passed >> >>>>by reference, yet any can be excluded. So for example if you were >>>>calling socket_select with a read socket array, a write socket array, >>>>yet no exception array (quite common), you are currently forced to do >>>>something like the following: >>>> >>>>$wfds = array($sock1, $sock2); >>>>$rfds = array($sock3, $sock4); >>>>$null = NULL; >>>> >>>>socket_select($rfds, $wfds, $null); >>>> >>>> >>>>I have ran into this problem before several times while developing in >>>>user space. (Especially when passing around semi-complex data >>>>structures) >>>> >>>>Proposed Solution >>>>------------------ >>>> >>>>Allow all expressions to be passed by reference. This will allow >>>>something like the following >>>> >>>>function normalize(&$element_tree, &$node_mapping, $max_depth){ >>>>//Code >>>>} >>>> >>>>normalize($my_tree, NULL, 25000); >>>> >>>> >>>>Patch >>>>------ >>>> >>>>I have attached a patch against ZE2 that accomplishes this. >>>> >>>> >>>>Thanks, >>>>-Jason >>>> >>>> >>>> >>>> >>>> >>>>---- >>>> >>> >>>>Index: zend_compile.c >>>>=================================================================== >>>>RCS file: /repository/ZendEngine2/zend_compile.c,v >>>>retrieving revision 1.285 >>>>diff -u -r1.285 zend_compile.c >>>>--- zend_compile.c 23 Apr 2002 18:06:53 -0000 1.285 >>>>+++ zend_compile.c 25 May 2002 06:45:21 -0000 >>>>@@ -1271,7 +1271,7 @@ >>>> op = ZEND_SEND_REF; >>>> break; >>>> default: >>>>- zend_error(E_COMPILE_ERROR, "Only >>> >>>variables can be passed by reference"); >>> >>>>+ op = ZEND_SEND_VAR; >>>> break; >>>> } >>>> } >>>>Index: zend_execute.c >>>>=================================================================== >>>>RCS file: /repository/ZendEngine2/zend_execute.c,v >>>>retrieving revision 1.341 >>>>diff -u -r1.341 zend_execute.c >>>>--- zend_execute.c 8 May 2002 18:43:19 -0000 1.341 >>>>+++ zend_execute.c 25 May 2002 06:45:25 -0000 >>>>@@ -2292,10 +2292,6 @@ >>>> NEXT_OPCODE(); >>>> } >>>> case ZEND_SEND_VAL: >>>>- if >>> >>>(EX(opline)->extended_value==ZEND_DO_FCALL_BY_NAME >>> >>>>- && >>> >>>ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->op2.u.opline_num, EX(fbc), >>>EX(fbc)->common.arg_types)) { >>> >>>>- zend_error(E_ERROR, >>> >>>"Cannot pass parameter %d by reference", EX(opline)->op2.u.opline_num); >>> >>>>- } >>>> { >>>> zval *valptr; >>>> zval *value; >>>>@@ -2329,7 +2325,8 @@ >>>> >>> >>>zend_ptr_stack_push(&EG(argument_stack), varptr); >>> >>>> NEXT_OPCODE(); >>>> } >>>>- zend_error(E_ERROR, "Only >>> >>>variables can be passed by reference"); >>> >>>>+ /* Should only occur with an >>> >>>uninitialized variable */ >>> >>>>+ goto send_by_var; >>>> } >>>> NEXT_OPCODE(); >>>> case ZEND_SEND_VAR: >>>> >>>>---- >>>> >>> >>>>-- >>>>PHP Development Mailing List <http://www.php.net/> >>>>To unsubscribe, visit: http://www.php.net/unsub.php >>>>---- >>>> >>> >>>>-- >>>>PHP Development Mailing List <http://www.php.net/> >>>>To unsubscribe, visit: http://www.php.net/unsub.php >>> >> >>-- >>PHP Development Mailing List <http://www.php.net/> >>To unsubscribe, visit: http://www.php.net/unsub.php >> > > > > ______________________________________________________________________________ > ifrance.com, l'email gratuit le plus complet de l'Internet ! > vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP... > http://www.ifrance.com/_reloc/email.emailif > > > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php