通过引用返回的PHP不使用普通函数,但使用OOP

通过引用返回的PHP不使用普通函数,但使用OOP,php,Php,如果我尝试此代码: <?php class ref { public $reff = "original "; public function &get_reff() { return $this->reff; } public function get_reff2() { return $this->reff; } } $thereffc = new ref; $aa

如果我尝试此代码:

<?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
?>
看起来函数
foo()
无法识别它通过引用返回的内容,并且顽固地返回它想要的内容


通过引用返回是否仅在OOP上下文中起作用???

这是因为当函数调用完成且函数对变量的本地引用未设置时,函数的作用域将崩溃。对该函数的任何后续调用都会创建一个新的$param变量

即使在函数中不是这样,每次调用函数时,您都会将变量重新分配给第一个

如果要证明引用返回有效,请使用static关键字为函数变量提供持久状态

看这个例子

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


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

echo test();
埃科

Hello
Goodbye

这是因为当函数调用完成且函数对变量的本地引用未设置时,函数的作用域将崩溃。对该函数的任何后续调用都会创建一个新的$param变量

即使在函数中不是这样,每次调用函数时,您都会将变量重新分配给第一个

如果要证明引用返回有效,请使用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
设置为该值,以便函数返回对新设置变量的引用

所以这更像是一个变量范围的问题,你在这里问:

通过引用返回是否仅在OOP上下文中有效

不。如果这是一个函数或类方法,PHP不会有任何区别,它总是有效的

您的提问表明您可能还没有完全理解PHP中的引用是什么,正如我们所知,这是可能发生的。我建议您阅读PHP手册中的整个主题,以及至少两个不同作者提供的源代码。这是一个复杂的话题

在您的示例中,请注意您在此处返回的引用。您在调用函数时总是将
$param
设置为该值,以便函数返回对新设置变量的引用

所以这更像是一个变量范围的问题,你在这里问:



我真的很感兴趣,你为什么要这么做?是什么迫使你这么做的?madara我读到了关于通过引用返回的内容,顺便说一句,我正在读wordpress中的一个函数,它使用了引用,所以我想知道编码者到底想做什么,在他的函数名前加上一个-!!!如果通过引用返回较大的内容(不仅仅是一个字符串,而是一个巨大的结果集),则返回该内容的地址,而不是将整个结果复制到一个新变量中。它不像您所假设的那样将变量保留在函数范围内。@hanachi它是WP,所以我认为编码者知道他想做什么的可能性接近0%
。在日常编码中使用引用的理由很少。请看@hanachi:Hint,你可能永远不应该这样做。WP代码很糟糕,不要把它当作榜样。我真的很感兴趣,为什么你会想要它呢?是什么迫使你这么做的?madara我读到了关于通过引用返回的内容,顺便说一句,我正在读wordpress中的一个函数,它使用了引用,所以我想知道编码者到底想做什么,在他的函数名前加上一个-!!!如果通过引用返回较大的内容(不仅仅是一个字符串,而是一个巨大的结果集),则返回该内容的地址,而不是将整个结果复制到一个新变量中。它不像您所假设的那样将变量保留在函数范围内。@hanachi它是WP,所以我认为编码者知道他想做什么的可能性接近0%
。在日常编码中使用引用的理由很少。请看@hanachi:Hint,你可能永远不应该这样做。WP代码很可怕,不要把它当作榜样;是的,我知道这个!!那么通过引用返回是一个神话吗?不。。这不是一个神话,你已经证明了它在一个正常行为的情况下工作,即一个具有持久状态的对象。我已经证明了它在类中的OOP中是真实的,但在普通的PHP代码中不是!php.net文档中的家伙应该已经说得够清楚了!对吗?请参阅更新。。。。您应该重新阅读功能范围arigato madara的描述;是的,我知道这个!!那么通过引用返回是一个神话吗?不。。这不是一个神话,你已经证明了它在一个正常行为的情况下工作,即一个具有持久状态的对象。我已经证明了它在类中的OOP中是真实的,但在普通的PHP代码中不是!php.net文档中的家伙应该已经说得够清楚了!对吗?请参阅更新。。。。您应该重新阅读功能范围的描述谢谢您的建议,但我会很贪婪!你能纠正我的功能,让参照返回有效吗?我正在谈论PHP4中的简单函数,只是不要在函数中使用静态变量,也不要使用尚未引用的参数!我会很感激的!在你的例子中没有什么有用的。如前所述,以这种方式编写函数更容易使您误解变量范围是什么。仅使用引用返回也不会引入量子移位,从而使