我需要从类外部更改一个数组,这是一个类变量。例如,请参阅下面的代码:
<?php
class ArrayRet
{
private $_ar = array();
public function __construct()
{
$this->_ar['test1'] = 'hello1';
$this->_ar['test2'] = 'hello2';
}
public function getAr()
{
return $this->_ar;
}
public function dump()
{
var_dump($this->_ar);
}
}
$arRet = new ArrayRet();
$arRet->dump();
$ar = $arRet->getAr();
$ar['test2'] = 'works!!!';
$arRet->dump();
?>
$this->_ar['test2']
应为works!!!
,但仍为hello2
我怎样才能使这个工作?
编辑:通过更改here找到的语法,它可以正常工作。因此,我们需要将方法更改为:
public function &getAr()
{
return $this->_ar;
}
还有对此的呼吁:
$ar = &$arRet->getAr();
答案 0 :(得分:2)
使用当前代码,您不能将ArrayRet::$_ar
的可见性声明为private
,这意味着无法在类的范围之外访问它。
将ArrayRet::$_ar
声明为public
,您可以执行以下操作...
class ArrayRet
{
public $_ar = array();
// ...
}
$arRet = new ArrayRet();
$arRet->_ar['test2'] = 'works!!!';
$arRet->dump();
我不建议直接从类外部修改对象属性,因为这会导致令人头疼。
答案 1 :(得分:2)
$ar
并更改了,因此您更改了$ar
,而不是$arRet
,因此您的对象未更改。
2-您将_ar
设置为私有,因此您无法直接更改它,因此您必须创建另一个功能来更改它。有点像:
<?php
class ArrayRet
{
private $_ar = array();
public function __construct()
{
$this->_ar['test1'] = 'hello1';
$this->_ar['test2'] = 'hello2';
}
public function getAr()
{
return $this->_ar;
}
public function dump()
{
var_dump($this->_ar);
}
public function change_var($key,$val)
{
$this->_ar[$key] = $val;
}
}
$arRet = new ArrayRet();
$arRet->dump();
$arRet->change_var('test1','works!!!');
$ar = $arRet->getAr();
$arRet->dump();
var_dump($ar);
?>
当您看到$arRet
已更改并将其放入$ar
时。