php类返回;函数返回

php类返回;函数返回,php,Php,对象变量$c->$var1在类a中已更改 var$new_var未在函数d中更改; 我有点困惑。 我的英语很差,你能听懂吗 <?php class a{ public function test () { $b = new b; $c = new c; $b->test($c); var_dump($c); } } class b

对象变量$c->$var1在类a中已更改

var$new_var未在函数d中更改; 我有点困惑。 我的英语很差,你能听懂吗

<?php
    class a{
        public function test () {
            $b = new b;
            $c = new c;
            $b->test($c);
            var_dump($c);
        } 
    }

    class b{
        public function test($c) {
            $c->var1 = 2;
            return $c;
        }
    }

    class c {
        public $var1 = 1;
    }

    $a = new a;
    $a->test();

    function d($new_var) {
        $new_var = 2;
        return $new_var;
    }

    $new_var = 1;
    d($new_var);
    echo $new_var

您的问题是您有这个函数

function d($new_var) {
        $new_var = 2;
        return $new_var;
}
这里是真的,您可能传递一个不同的变量作为参数,但您接受该参数,并决定将其设置为2,然后返回它。 如果你想归还你通过的东西,你应该在

function d($new_var) {
        return $new_var;
}
或者,如果您想要类似于类b的测试函数,请尝试tgus

function d($new_var) {
    $d->new_var = $new_var;
    return $d;
}

因此,您可以在返回的对象$d中访问$new\u var,您希望下面的代码将
$new\u var
的值从
1
更改为
2
,对吗

$new_var = 1;
d($new_var);
echo $new_var
唉,这是不可能的,因为返回的值从未分配回变量。要确保传递的变量即使在作为参数传递到的函数范围之外也会保留其新值,您需要将变量作为引用而不是值传递,如下所示:

function d(&$new_var) {
    $new_var = 2;
    return $new_var;
}

注意函数签名中变量名前面的符号(
&
)。这将导致变量被禁用,因此它将在函数内部保留对它所做的任何更改。

函数
d()
正在将var
$new\u var
设置为值
2
,无论传递给该函数的是什么,你能更清楚你的问题是什么吗?因为我不确定我是否收到了你的询问,但是$c在这行$b->test($c)中被更改了;还是搞不清楚问题出在哪里!