我想做这个:
class MyClass {
var $array1 = array(3,4);
var $array2 = self::$array1;
}
并且$array2
不起作用。
您是否有使类属性等于另一个类属性的解决方案/技巧?
我想做这个:
class MyClass {
var $array1 = array(3,4);
var $array2 = self::$array1;
}
并且$array2
不起作用。
您是否有使类属性等于另一个类属性的解决方案/技巧?
根据PHP Manual
:
默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。
你可以做的是:
class MyClass {
var $array1 = array(3,4);
var $array2 = array();
function MyClass() {
$this->array2 = $this->array1;
}
}
每次创建新对象时都会调用该函数MyClass
(或者如果您在 PHP5 中),因此任何实例都将具有与其属性具有相同值的属性。__construct
MyClass
array2
array1
$myclass = new MyClass();
print_r($myclass->array1); // outputs Array ( [0] => 3 [1] => 4 )
print_r($myclass->array2); // outputs Array ( [0] => 3 [1] => 4 )
我是 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 )
添加引用后,两个类属性值都会在其中任何一个发生更改时发生更改。我错过了什么吗?
您的回答,Paolo 和 notruthless,都非常好,非常感谢!
如果我希望这两个属性保持同步:
function MyClass() {
$this->array2 = &$this->array1;
}
如果我希望这两个数组最初具有相同的值,但后来想单独修改它们,我删除'&':
function MyClass() {
$this->array2 = $this->array1;
}