-3

次のコードでエラーが発生します

class One{    
    public $var = 10;
}

class Two extends One{
    public $var = 20;
    function __construct(){
        $this->var = parent::$var;
    }
}

$two = new Two();
echo $two->var;
4

4 に答える 4

1

変数をオーバーライドしています。抽象/親クラスで何らかのデフォルト/読み取り専用が必要な場合は、次のようにしてみてください。

<?php

class One{    
    private $var = 10;

        public function getVar(){
            return $this->var;
        }
}

class Two extends One{
    public $var;
    function __construct(){
        $this->var = parent::getVar();
    }
}

$two = new Two();
echo $two->var;

?>
于 2013-01-17T01:02:11.897 に答える
1

parent::$varこのように(非常に静的に)取得したい場合は、One と Two で bothvarとして定義します。static

これは機能します。

class One {    
    public static $var = 10;
}

class Two extends One {
    public static $var = 20;

    public function __construct() {
        // this line creates a new property for Two, not dealing with static $var
        $this->var = parent::$var;
        // this line makes real change
        // self::$var = parent::$var;
    }
}

$two = new Two();
echo $two->var; // 10
echo $two::$var; // 20, no changes
echo Two::$var;  // 20, no changes

// But I don't recommend this usage
// This is proper for me; self::$var = parent::$var; instead of $this->var = parent::$var;
于 2013-01-17T01:25:00.607 に答える
0

public変数が または のいずれかである限りprotected、サブクラスに継承されます。

class One{    
    public $var = 10;
}

class Two extends One{
    public $var = 20;
}

class Three extends One{
}

$a = new One();
echo $a->var; // 10

$b = new Two();
echo $b->var; // 20

$c = new Three();
echo $c->var; // 10
于 2013-01-17T01:03:29.043 に答える
0

それは組み込みです。変数を再宣言しないでください。(デモ)

class One {
    public $var = 10;
}

class Two extends One {
}

$two = new Two();
echo $two->var;
于 2013-01-17T00:56:25.070 に答える