当我遇到问题时,我正在使用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#中找不到与get
和set
类似的方法。有什么想法吗?
答案 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。