1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【PHP】函数的引用返回

【PHP】函数的引用返回

时间:2021-01-14 20:42:26

相关推荐

【PHP】函数的引用返回

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

PHP:函数的引用返回

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

调用函数时加引用符号可以理解,就是声明的接受变量是一个引用嘛。

(实验证明,这是错的,说引用类型只能赋值给变量。What?不知所云,求指教。)

可是函数声明就没有那么好理解了。

中的例子:

-----------------------------------------------

<?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、引用返回是把返回变量的引用返回来了。而且,返回引用的格式决定了两边都要用 & 声明。

若只是在函数那边声明引用,那么返回结果将依然是赋值给接收变量。是不是就是返回一个变量拷贝呢?

若只是在接收变量那边声明引用就会报错,因为函数(还是返回的值?)不能用 & 求地址。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。