如何在对象中使用数组?

时间:2014-04-20 14:26:43

标签: php oop

当我遇到问题时,我正在使用PHP创建一个用于验证联系表单的类。我最终将它追溯到类中的一个数组,并编写了一个测试脚本来尝试解决问题:

<?php

class Object {
    public $testArray = array(5);

    function __construct() {
        $testArray[] = 7;
    }

    function addNumber() {
        $testArray[] = mt_rand(10,20);
    }

    function returnArray() {
        return var_dump($testArray);
    }
}

$object = new Object;
$object->addNumber();
echo($object->returnArray());
var_dump($object->testArray);

这会输出NULL array(1) { [0]=> int(5) }

我很困惑为什么这不起作用。最后我希望数组是私有的,但是在C#中找不到与getset类似的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

放手一搏:

class Object {
    public $testArray = array(5);

    function __construct() {
        $this->testArray[] = 7;
    }

    function addNumber() {
        $this->testArray[] = mt_rand(10,20);
    }

    function returnArray() {
        return var_dump($this->testArray);
    }
}

你必须使用$ this引用类变量 - 否则它会尝试为你所在的函数设置一个局部变量。

您可以将PHP的magic __set()和__get()方法用于与您提到的C#类似的函数:PHP Overloading

答案 1 :(得分:1)

$testArray[] = mt_rand(10,20);

应该是:

$this->testArray[] = mt_rand(10,20);

$testArray只是另一个局部变量(函数的本地变量,没有类)。如果它没有值,则为null。这与您所看到的输出一致。永远不会修改$object->testArray

答案 2 :(得分:1)

您必须使用$ this访问类变量。所以$ testArray应该是$ this-&gt; testArray。