php类返回;功能回归

时间:2015-10-20 07:34:49

标签: php

对象var $ 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

2 个答案:

答案 0 :(得分:0)

你的问题是你有这个功能

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;
}

因此,您可以在返回的objecd $ d

中访问$ new_var

答案 1 :(得分:0)

您希望以下代码段将$new_var的值从1更改为2,对吧?

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

唉,这不可能,因为返回的值永远不会被分配回变量。为了确保传递的变量即使在作为参数传递的函数范围之外也将保留其新值,您需要将变量作为引用而不是值传递,如下所示:

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

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