PHP:函數的引用返回

PHP:函數的引用返回

遇到函數聲明時前面加引用符號的情況。
調用函數時加引用符號可以理解,就是聲明的接受變量是一個引用嘛。
(實驗證明,這是錯的,說引用類型只能賦值給變量。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、引用返回是把返回變量的引用返回來了。而且,返回引用的格式決定了兩邊都要用 & 聲明。
    若只是在函數那邊聲明引用,那麼返回結果將依然是賦值給接收變量。是不是就是返回一個變量拷貝呢?
    若只是在接收變量那邊聲明引用就會報錯,因爲函數(還是返回的值?)不能用 & 求地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章