On 09/23/2011 02:06 PM, I wrote: > When a built-in function is defined with ZEND_SEND_PREFER_REF, PHP will > issue a strict warning if you use an assignment expression as the parameter. > > As an example, current() show this behaviour. > > <?php > current($foo = array("bar")); > ?> > > Presents you with: > > PHP Strict Standards: Only variables should be passed by reference in > %s on line %d
A patch was appended, discussed, and improved, and I have uploaded a test-case, as well as a minimal patch that fixes the problem (attached) to the original bug-report. https://bugs.php.net/bug.php?id=55754 The patch still applies to trunk, and I think it should be applied to the 5.3 and 5.4 branches as well. What to do next? The feedback has been constructive, but I feel it has stagnated a bit. Of course, you may all be busy with other interesting stuff, but is there anything else you require from me to get this rolling? Should I explain better why I think it's an issue, and why the patch is needed? An indication as to if anyone is reviewing the proposed patch, and considering applying it, or telling me that this is the completely wrong approach to solve the problem and dropping a few hints would be most appreciated, but any feedback is welcome. Daniel K.
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c325a7e..d361c64 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2096,7 +2096,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ if (function_ptr) { if (ARG_MAY_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) { - if (param->op_type & (IS_VAR|IS_CV)) { + if (param->op_type & (IS_VAR|IS_CV) && original_op != ZEND_SEND_VAL) { send_by_reference = 1; if (op == ZEND_SEND_VAR && zend_is_function_or_method_call(param)) { /* Method call */
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php