PHP类属性可以等于另一个类属性吗?

时间:2009-01-25 02:26:30

标签: php class properties

我想这样做:

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

$array2不起作用。

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

3 个答案:

答案 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;
}