Re: RFC: allow_call_pass_by_reference

From: Date: Wed, 28 May 2008 06:05:56 +0000
Subject: Re: RFC: allow_call_pass_by_reference
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-37933@lists.php.net to get a copy of this message
Hi, There are three purposes: 1) At call time, nothing significes what is the caller passing, the syntax is the same for passing reference or passing value, so it's prone to confusion. You're passing something which *may* or *may not* be modified if taken as a reference. Quick, is the variable taken by reference here somefunction($hi). A more clear version of the syntax is what I covered in my original email, where declaring function foo(& $foo) is a sort of contract that *forces* (with error) that the variable is passed by reference at call time, thus making the actions of the function explicit. 2) There's a broken symmetry here. While passing by reference is implicit at call time, at return time it's not. I need to both declare the function return by reference AND use "= & " to assign the results. Otherwise I get a copy. That's a problem I often have. There's no compiler error to warn me I did otherwise. I'd rather all those be explicit( require pass/return by val, require pass/return by refr: "&", accepts both "&?"), and the strict cases throw errors when the contract is not met at both sides. 3) As I mentioned there are three use cases, of which we support two, which I covered in my original email. The reason I said "in a perfect world" is because the current "hidden" pass by reference at call time will be incompatible with that scheme, so I doubt anyone would consider it. Regards, Stan Vassilev
Hi!
In a perfect world, here's how I'd do it, of course the actual syntax can be something else (this also improves the understanding of the code as it makes the intent explicit, versus implicit at call time, as it is now): --- function foo(& $a) {} // allows only explicit pass by reference foo($a); // illegal, error foo(& $a); // legal, pass by reference
I'm not sure I understand what's the purpose of this. Passing by reference means that function may modify it's parameter. I see no reason why such function should be called with some special syntax, could you explain? -- Stanislav Malyshev, Zend Software Architect stas@zend.com http://www.zend.com/ (408)253-8829 MSN: stas@zend.com -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php


« previous php.internals (#37933) next »