PHP功能混乱

Mat*_*att 0 php

我有以下场景(简化):

function changeFruit($fruit) {
    changeAgain($fruit);

}

function changeAgain($fruit) {
     $fruit = "Orange";
}

MAIN:

$fruit = "Apple";
changeFruit($fruit);
echo $fruit // Will show up as "Apple", How do I get it to show up as "Orange"??
Run Code Online (Sandbox Code Playgroud)

编辑:忘记加入.情景不能使用返回声明 - 只是和$变量

谢谢!马特穆勒

Mez*_*Mez 10

当您将不是对象的东西传递给PHP中的函数时,php会在函数中复制该函数.

为了使它不使用副本,您需要告诉PHP您正在传递引用.

这是通过&运算符完成的

function changeFruit(&$fruit) {
    changeAgain($fruit);

}

function changeAgain(&$fruit) {
     $fruit = "Orange";
}

$fruit = "Apple";
changeFruit($fruit);
echo $fruit;
Run Code Online (Sandbox Code Playgroud)

使用函数的返回值会更加明智和更好的实践(因为这样可以更容易阅读)

function changeFruit($fruit) {
    return changeAgain($fruit);
}

function changeAgain($fruit) {
     // do something more interesting with$fruit here
     $fruit = "Orange";
     return $fruit;
}

$fruit = "Apple";
$fruit = changeFruit($fruit);
echo $fruit
Run Code Online (Sandbox Code Playgroud)