PHP 类函数不会更改数组

1 php arrays oop methods

我对 PHP 和一般编程很陌生。我一直在使用 PHP 处理一些需要我创建类的事情,这很好,除了我似乎无法让我的类方法在作为类属性的数组上工作。我一定是做了一些根本性错误的事情,因为无论项目如何,它似乎都不起作用。

这是我刚刚写的一个示例(我认为发布一个简短的示例会比发布我的实际项目的代码更容易,因为我的实际项目的代码有点长且复杂)。

class Test {
    public $testArray;
    public $testInt;

    public function __construct() {
        $this->testArray = array();
        for ($i=1; $i<=20; $i++) {
            $this->testArray[] = array(1, 2);
        }
        $this->testInt = 4;
    }

    public function testf() {
        $this->testInt += 1;
        foreach ($this->testArray as $n) {
            $n[] = 3;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在最后添加一些代码,以便打印出正在发生的事情:

$obj = new Test;

echo 'Before function call:';
echo '<br />testArray:<br />';
foreach ($obj->testArray as $n) {
    print_r($n);
    echo '<br />';
}
echo '<br />testInt: ';
echo $obj->testInt;
echo '<br />';
echo '<br />';
echo '<br />';

$obj->testf();

echo 'After function call:';
echo '<br />testArray:<br />';
foreach ($obj->testArray as $n) {
    print_r($n);
    echo '<br />';
}
echo '<br />testInt: ';
echo $obj->testInt;
echo '<br />';
Run Code Online (Sandbox Code Playgroud)

然后你最终看到的是,在函数调用之后,testInt变量发生了变化,但变量testArray没有变化。

如果其中任何内容不够清楚,请告诉我。这已经让我发疯有一段时间了。预先感谢您花时间查看我的问题。

JW.*_*JW. 5

当你这样做时:

    foreach ($this->testArray as $n) {
        $n[] = 3;
    }
Run Code Online (Sandbox Code Playgroud)

您没有修改 testArray 的值。你正在制作它们的副本。每当您在 PHP 中将一个值分配给另一个变量时,您都会复制该值。(对象是一个例外,但这与这里无关。)

如果要修改原始版本,则需要通过其自己的变量名称来引用它,如下所示:

    foreach ($this->testArray as $index => $value) {
        $this->testArray[$index][] = 3;
    }
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 5

您需要在 foreach 循环中添加一些内容:

  foreach ($this->testArray as &$n) {
        $n[] = 3;
    }
Run Code Online (Sandbox Code Playgroud)

应该可以做到这一点。&$n 表示引用数组元素而不是复制它。如果您想覆盖它,您可能还想将 $n[] 更改为 $n。