首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Returning References

Returning by reference is useful when you want to use a function to find to which variable a reference should be bound. Do not use return-by-reference to increase performance. The engine will automatically optimize this on its own. Only return references when you have a valid technical reason to do so. To return references, use this syntax:

代码语言:javascript
复制
<?php
class?foo?{
????public?$value?=?42;

????public?function?&getValue()?{
????????return?$this->value;
????}
}

$obj?=?new?foo;
$myValue?=?&$obj->getValue();?//?$myValue?is?a?reference?to?$obj->value,?which?is?42.
$obj->value?=?2;
echo?$myValue;????????????????//?prints?the?new?value?of?$obj->value,?i.e.?2.
?>

In this example, the property of the object returned by the getValue function would be set, not the copy, as it would be without using reference syntax.

Note: Unlike parameter passing, here you have to use & in both places - to indicate that you want to return by reference, not a copy, and to indicate that reference binding, rather than usual assignment, should be done for $myValue.Note: If you try to return a reference from a function with the syntax: return ($this->value); this will not work as you are attempting to return the result of an expression, and not a variable, by reference. You can only return variables by reference from a function - nothing else. Since PHP 5.1.0, an E_NOTICE error is issued if the code tries to return a dynamic expression or a result of the new operator.

To use the returned reference, you must use reference assigment:

代码语言:javascript
复制
<?php
function?&collector()?{
??static?$collection?=?array();
??return?$collection;
}
$collection?=?&collector();
$collection[]?=?'foo';
?>

To pass the returned reference to another function expecting a reference you can use this syntax:

代码语言:javascript
复制
<?php
function?&collector()?{
??static?$collection?=?array();
??return?$collection;
}
array_push(collector(),?'foo');
?>

Note: Note that array_push(&collector(), 'foo'); will not work, it results in a fatal error.

← Passing by Reference

Unsetting References →

代码语言:txt
复制
 ? 1997–2017 The PHP Documentation Group

Licensed under the Creative Commons Attribution License v3.0 or later.

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com