我想这样做:
class MyClass {
var $array1 = array(3,4);
var $array2 = self::$array1;
}
且$array2
不起作用。
您是否有解决方法/技巧使类属性等于另一个类属性?
答案 0 :(得分:5)
根据PHP Manual
:
默认值必须是常量表达式,而不是(例如)变量,类成员或函数调用。
你可以做的是:
class MyClass {
var $array1 = array(3,4);
var $array2 = array();
function MyClass() {
$this->array2 = $this->array1;
}
}
每次创建新对象时,都会调用函数MyClass
(如果你在PHP5中,则为__construct
),因此MyClass
的任何实例都会有{{1}与其array2
属性具有相同值的属性。
array1
答案 1 :(得分:3)
我是PHP的新手,但Paolo的答案似乎只是在构造函数中初始化值是相同的,但这实际上并不会使两个变量都引用相同的内容。怎么样:
class MyClass {
var $array1 = array(3,4);
var $array2 = array();
function MyClass() {
$this->array2 = &$this->array1;
}
}
$myclass = new MyClass();
print_r($myclass->array1); // outputs Array ( [0] => 3 [1] => 4 )
print_r($myclass->array2); // outputs Array ( [0] => 3 [1] => 4 )
echo "<br />";
$myclass->array1[0] = 1;
$myclass->array2[1] = 2;
print_r($myclass->array1); // outputs Array ( [0] => 1 [1] => 2 )
print_r($myclass->array2); // outputs Array ( [0] => 1 [1] => 2 )
添加引用时,两个类属性值在更改时都会更改。我错过了什么吗?
答案 2 :(得分:0)
你的答案,保罗和无言,都非常好,非常感谢你!
如果我希望这两个属性保持同步:
function MyClass() {
$this->array2 = &$this->array1;
}
如果我希望这两个数组最初具有相同的值,但又想要单独修改它们,我会删除'&amp;':
function MyClass() {
$this->array2 = $this->array1;
}