4

我想做这个:

class MyClass {
   var $array1 = array(3,4);
   var $array2 = self::$array1;
}

并且$array2不起作用。

您是否有使类属性等于另一个类属性的解决方案/技巧?

4

3 回答 3

6

根据PHP Manual

默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。

你可以做的是:

class MyClass {
    var $array1 = array(3,4);
    var $array2 = array();

    function MyClass() {
        $this->array2 = $this->array1;
    }
}

每次创建新对象时都会调用该函数MyClass(或者如果您在 PHP5 中),因此任何实例都将具有与其属性具有相同值的属性。__constructMyClassarray2array1

$myclass = new MyClass();
print_r($myclass->array1); // outputs Array ( [0] => 3 [1] => 4 ) 
print_r($myclass->array2); // outputs Array ( [0] => 3 [1] => 4 ) 
于 2009-01-25T02:32:17.373 回答
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 )

添加引用后,两个类属性值都会在其中任何一个发生更改时发生更改。我错过了什么吗?

于 2009-01-25T03:06:34.683 回答
0

您的回答,Paolo 和 notruthless,都非常好,非常感谢!

如果我希望这两个属性保持同步:

function MyClass() {
    $this->array2 = &$this->array1;
}

如果我希望这两个数组最初具有相同的值,但后来想单独修改它们,我删除'&':

function MyClass() {
    $this->array2 = $this->array1;
}
于 2009-01-25T05:38:05.907 回答