LINUX.ORG.RU

Вопрос по наследованию приватных переменных в PHP

 


0

1
class A {
    private $id = 'A';
    private function foo() {
        echo "func A";
    }
    public function test() {	
	echo $this->id . "\n"; // Берёт значение из A, не из B
        $this->foo(); // То же самое
    }
}

class B extends A {
	private $id = 'B';
	public function foo() {
	     echo "func B";
	}
}


$b = new B();
$b->test(); // "A, func A"

Я хочу, чтобы выводил «B, func B»

Если ты объявляешь твоё свойство с модификатором доступа private в родительском классе, то ты сам подписываешься на то, что наследники этого класса абсолютно никаким образом не смогут получить доступ и как-либо повлиять на это самое private свойство.

Добавь аксессоров или сделай твоё свойство protected. Это будет правильным решением.

resurtm ★★★
()

Уже не «наследие». Растём, однако..

Yazaban
()

Странный ты какой-то...

VirRaa ★★★
()
class A {
    protected $id = 'A';

    protected function foo(){
        echo "func A\n";
    }

    public function test() {
        echo $this->id . "\n";
        $this->foo();
    }
}

class B extends A {
    protected $id = 'B';

    public function foo() {
        echo "func B\n";
    }
}

$b = new B();
$b->test(); // "B, func B"

P.S: Как мило. Изучает PHP по документации, параллельно разыскивая «хитрые» моменты языковых конструкций, и притаскивает свои находки на ЛОР. И в головёнку ведь не приходит, что при его-то энергии можно что-то полезное делать.

P.P.S.: Как вот это проштудируешь, заходи. Будем ждать.

valich ★★★
()
Ответ на: комментарий от valich

Более того ТС не осилил основы ООП. В Си++ абсолютно такое же поведение, к примеру. :-)

resurtm ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.