以下代码似乎在有和没有与号(&)的情况下都做同样的事情:
<?php
class Cartera {
public $dinero = 93;
public function &muestraLaPasta() { // Si quito este ampersand
return $this->dinero;
}
}
$carteraDeMaria = new Cartera;
$miPastaGansa = &$carteraDeMaria->muestraLaPasta(); // y este
echo $miPastaGansa; // el resultado es el mismo
?>
无论我是留下它们还是删除它们,结果都是一样的,它会打印 93。它们有什么用?
感谢 Ivan Botero 的回答,我知道这个函数返回一个引用。
但它似乎不是一个能够独立生存的参考。如果我将它分配给一个变量,则该变量包含值,而不是引用,尽管事实上我分配给它的是该函数的结果,该函数应该是一个返回引用的函数。
<?php
class Cartera {
public $dinero = 93;
public function &muestraLaPasta() { // Esta función devuelve una referencia
return $this->dinero;
}
}
$carteraDeMaria = new Cartera;
$miPastaGansa = $carteraDeMaria->muestraLaPasta(); // Parecería que almaceno esa
//referencia en una variable
echo $miPastaGansa . "\n"; // el resultado es el mismo
// Cuanto dinero tiene Maria
echo $carteraDeMaria->dinero . "\n";
// Cuanto dinero tiene Maria ahora
$miPastaGansa = 5000; // Pero las modificaciones a través de esa referencia
// almacenada en esta variable
echo $carteraDeMaria->dinero . "\n"; // No se propagan
我认为逃脱我的函数返回的引用仍然有一些很好的细节。
为什么我必须在分配之前使用另一个& ?看来,那时我提到了金钱的参考。而不仅仅是提到金钱,这正是我想要的。
开始。
我们必须清楚PHP 中的引用是什么。
根据官方 PHP 文档中的一个小片段。
让我们看一下这个例子:
我们将得到的结果将是:
但是现在,让我们在代码中添加一个 & 符号,看看会发生什么:
我们将得到的结果将是:
这告诉我们什么?
我们使用运算符访问另一个变量的相同值并使用它,我们修改了它,但修改它修改了原始变量的值,在这种情况下
$variableA
。这称为按引用分配。
以这种想法的顺序
我们可以看到一个使用引用的简单函数示例:
该程序的结果将是:
我们再次使用与号运算符 (&),我们将看到魔法是如何发生的。
新的结果是:
与前面的示例一样,我们在这里所做的是将对外部变量的引用传递给函数,并通过该引用修改它,在每次调用函数时增加它的值
caminar()
。我们知道这是通过引用传递。
最后
这称为返回推荐。
这是什么意思?
让我们看一下这个例子:
我们已经用文本“StackOverflow”初始化了 的值
$variable
,但是当我们运行程序时,我们得到以下输出:发生的事情是在变量中
$puntero
我们保存了对变量内存位置的引用$variable
,其中包含我们的原始文本。获得对所述变量的引用会使我们对其所做的任何更改都会影响原始变量。我对您的示例进行了修改,回答了为什么打印相同内容的问题:
结果我们得到:
这里发生了什么?
打印引用函数的返回值时
muestraLaPasta()
,该值将始终保持不变。改变的是该值的来源,在这种情况下,我添加了这几行:修改它们的引用
$miPastaGansa
,在本例中是指向属性的“指针”$dinero
。稍后,当我们获得属性的值时,这将为我们提供 5000 的值$dinero
。实际上几乎没有什么可以添加到给出的出色答案中。
我想提供一个关于引用发生了什么的视觉解释。
如前所述,PHP 中的引用允许您使用两个变量来引用相同的内容。为此,使用了&符号(
&
),当我学习打字时,他们称之为:“and” Commercial。PHP 中的引用不是指针,因为它们在其他语言中,但就像符号表别名。
我们开始...
Caso 1:
Código:
Resultado:
Caso 2:
Código:
Resultado:
Caso 3:
Código:
Resultado
:当引用被停用时,变量名称和变量内容之间的链接就被简单地破坏了。这并不意味着变量的内容将被破坏,因此,
$x
当引用被破坏时,它会恢复其原始值。Caso 4:
如果你想打破引用,正确的方法是使用
unset
Código:
Resultado:
Caso 5:
我们将尝试通过分配
null
给变量$x
然后为其分配一个新值来破坏引用。让我们看看发生了什么:Código:
Resultado:
可以在此处找到不同案例的完整演示。