博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【PHP】函数的引用返回
阅读量:5276 次
发布时间:2019-06-14

本文共 1933 字,大约阅读时间需要 6 分钟。

欢迎大家访问我自己架的博客站点 !

遇到函数声明时前面加引用符号的情况。

调用函数时加引用符号可以理解,就是声明的接受变量是一个引用嘛。
(实验证明,这是错的,说引用类型只能赋值给变量。What?不知所云,求指教。)
可是函数声明就没有那么好理解了。
php.net 中的例子:
-----------------------------------------------
<?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.
?>
本例中 getValue 函数所返回的对象的属性将被赋值,而不是拷贝,就和没有用引用语法一样。
-----------------------------------------------
还是没太明白,试验先。
eg 1、普通的函数声明,然后引用接收。
[code]
function foo() {
    $var = 0;
    return $var;
}
$get = & foo();
var_dump($get);
$get = 5;
$get = & foo();
var_dump($get);
[/code]
结果:
Strict standards: Only variables should be assigned by reference
int 0
Strict standards: Only variables should be assigned by reference
int 0
eg 2、将上面例子中的函数声明成了引用返回。
[code]
function & foo() {
    $var = 0;
    return $var;
}
$get = foo();
var_dump($get);
$get = 5;
$get = foo();
var_dump($get);
结果:
int 0
int 0
和没有把函数声明成引用一样的效果。
eg 3、将上面例子中的函数声明成了引用返回。
[code]
function & foo() {
    static $var = 0;
    return $var;
}
$get = & foo();
var_dump($get);
$get = 5;
$get = & foo();
var_dump($get);
[/code]
结果:
int 0
int 5
eg 4、面向对象中引用返回的应用。
[code]
/**
* 试验辅类,用于试验主类属性ref的->操作。
*/
class Ex {
public $some;
    function __construct() {
        $this->some = 0;
    }
    public function set($v) {
        $this->some = $v;
    }
    public function get() {
        return $this->some;
    }
}
/**
* 试验主类
*/
class MyClass {
    public $ref;
    function __construct() {
        $this->ref = & foo();
    }
}
function & foo() {
    $var = new Ex;
    return $var;
}
$class = new MyClass();
$class->ref->set(5);
var_dump($class->ref->get());
[/code]
结果:
int 5
总结:
1、一般来说,函数返回就是返回一个值。
2、引用就是计算出变量的地址。
3、引用返回是把返回变量的引用返回来了。而且,返回引用的格式决定了两边都要用 & 声明。
    若只是在函数那边声明引用,那么返回结果将依然是赋值给接收变量。是不是就是返回一个变量拷贝呢?
    若只是在接收变量那边声明引用就会报错,因为函数(还是返回的值?)不能用 & 求地址。

转载于:https://www.cnblogs.com/catroll/archive/2011/12/07/return_ref.html

你可能感兴趣的文章
线性规划实战—投资的收益和风险
查看>>
Golang 函数function
查看>>
flask的日志输出current_app.logger.debug
查看>>
js:自动亮起100盏灯
查看>>
httplib 和 httplib2区别之 gzip解压
查看>>
UVA1629 Cake slicing
查看>>
微信公众号开发入门---STATE 1:入门回复,菜单
查看>>
SSH学习(2)
查看>>
应用系统开发思想的变迁
查看>>
queue
查看>>
记录-- vue+element树节点的标注
查看>>
Inherits、CodeFile、CodeBehind
查看>>
使用Exceptionless记录日志
查看>>
Migration Necessary
查看>>
php第七节课
查看>>
高次同余方程求解
查看>>
[分治FFT]「CTSC2018」青蕈领主
查看>>
【转】NSMutableArray的正确使用
查看>>
CV届牛人
查看>>
jquery 点滴
查看>>