【发布时间】:2010-05-12 13:00:25
【问题描述】:
我有一个参考问题;这个例子应该比我更具描述性:P
我有一个类,它有一个对象数组,并通过一个键(字符串)检索它们,就像一个关联数组:
class Collection {
public $elements;
function __construct() {
$this->elements = array();
}
public function get_element($key) {
foreach($this->elements as $element) {
if ($element->key == $key) {
return $element;
break;
}
}
return null;
}
public function add_element ($element) {
$this->elements[] = $element;
}
}
然后我有一个对象(通用),带有一个键和一些变量:
class Element {
public $key;
public $another_var;
public function __construct($key) {
$this->key = $key;
$this->another_var = "default";
}
}
现在,我创建我的收藏:
$collection = new Collection();
$collection->add_element(new Element("test1"));
$collection->add_element(new Element("test2"));
然后我尝试更改“数组”中包含的元素的变量:
$element = $collection->get_element("test1");
$element->another_var = "random_string";
echo $collection->get_element("test1")->another_var;
好的,输出是
random_string
所以我知道我的对象是以引用模式传递给 $element 的。
但如果我这样做,那么:
$element = $collection->get_element("test1");
$element = null; //or $element = new GenericObject();
$element->another_var = "bla";
echo $collection->get_element("test1")->another_var;
输出是
default
如果它丢失了参考。
那么,怎么了?我有对元素变量的引用,而不是对元素本身的引用?
有什么想法吗?
编辑:为了澄清,我想用另一个“改变”对象元素,但保持数组中的位置。
现在我明白了这是不可能的:(
【问题讨论】:
-
为什么要访问空引用?你会期待什么样的结果?
标签: php arrays object reference