Skip to content

Implement explicit send-by-ref#110

Open
iluuu1994 wants to merge 3 commits intomasterfrom
explicitPassByRef
Open

Implement explicit send-by-ref#110
iluuu1994 wants to merge 3 commits intomasterfrom
explicitPassByRef

Conversation

@iluuu1994
Copy link
Copy Markdown
Owner

Currently, in order to pass an argument by reference, the reference has to be declared at the definition-site, but not at the call-site:

function byRef(&$ref) {}
byRef($var);

This change adds the ability to specify the by reference pass at both the definition-site and the call-site:

function byRef(&$ref) {}
byRef(&$var);

Importantly, specifying a reference during the call will generate an error if the argument is not also declared by-reference at the declaration site:

function byVal($val) {}
byVal(&$val); // ERROR

This makes it different from the call-time-pass-by-reference feature in PHP 4. If this feature is used, the reference has to be declared at both the call- and declaration-site.

Note that it is still possible to not explicitly specify the use of by-reference passing at the call-site. As such, the following code remain legal:

function byRef(&$ref) {}
byRef($var);

Currently, in order to pass an argument by reference, the reference
has to be declared at the definition-site, but not at the call-site:

    function byRef(&$ref) {}
    byRef($var);

This change adds the ability to specify the by reference pass at
*both* the definition-site and the call-site:

    function byRef(&$ref) {}
    byRef(&$var);

Importantly, specifying a reference during the call will generate
an error if the argument is not also declared by-reference at the
declaration site:

    function byVal($val) {}
    byVal(&$val); // ERROR

This makes it different from the call-time-pass-by-reference
feature in PHP 4. If this feature is used, the reference has to
be declared at both the call- *and* declaration-site.

Note that it is still possible to not explicitly specify the use
of by-reference passing at the call-site. As such, the following
code remain legal:

    function byRef(&$ref) {}
    byRef($var);
@iluuu1994 iluuu1994 force-pushed the explicitPassByRef branch from 67b3b1a to fa9c737 Compare May 29, 2024 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants