簡體   English   中英

通過引用返回的PHP無法使用正常功能,但可以使用OOP

[英]PHP returning by reference not working with normal functions but working with OOP

如果我嘗試此代碼:

<?php

class ref
{

    public $reff = "original ";

    public function &get_reff()
    {
        return $this->reff;
    }

    public function get_reff2()
    {
        return $this->reff;
    }
}

$thereffc = new ref;

$aa =& $thereffc->get_reff();

echo $aa;

$aa = " the changed value ";
echo $thereffc->get_reff(); // says "the changed value "
echo $thereffc->reff; // same thing
?>

然后按引用返回,對象屬性$reff的值隨着引用它的變量$aa變化而改變。

但是,當我在不在類內的普通函數上嘗試此操作時,它將無法正常工作!

我嘗試了這段代碼:

<?php

function &foo()
{
    $param = " the first <br>";
    return $param;
}

$a = & foo();

$a = " the second <br>";

echo foo(); // just says "the first" !!!

它看起來像函數foo()識別它通過引用返回,並且頑固地返回它想要的!

通過引用返回僅在OOP上下文中有效嗎?

這是因為當函數調用完成並且未設置對變量的函數本地引用時,函數的作用域就會崩潰。 隨后對該函數的任何調用都會創建一個新的$ param變量。

即使在函數中不是這種情況,您也會在每次調用函數時將變量重新分配給the first <br>

如果要證明按引用返回有效,請使用static關鍵字為函數變量賦予持久狀態。

看這個例子

function &test(){
    static $param = "Hello\n";
    return $param;
}


$a = &test();
echo $a;
$a = "Goodbye\n";

echo test();

回聲

Hello
Goodbye

通過引用返回僅在OOP上下文中有效嗎?

不會。PHP不管是函數還是類方法都沒有區別, 按引用返回始終有效。

您所詢問的內容表明您可能還沒有完全理解PHP中的引用,眾所周知(可能眾所周知)。 我建議您閱讀PHP手冊中的整個主題,以及至少兩位來自不同作者的資料。 這是一個復雜的話題。

在您的示例中,請注意您在此處返回的引用。 您可以在調用函數時始終將$param設置為該值,因此函數將返回對該新設置的變量的引用。

因此,這更多是您在此處提出的變量范圍問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM