PHP - расширяет класс, модифицирует защиту родителя

Я создал расширенный класс, чтобы изменить защищенную переменную для определенной цели. Однако я не понимаю, как я могу изменить защищенную переменную родительского класса из дочернего класса и использовать ее везде в родительских функциях.

Например:

class parent {

    protected $data;

    public function __construct() {
        add_action('wp_ajax_output', array(&$this, 'output'));
    }

    public function output() {
        get_data();
        show();
    }

    public function get_data() {
        $this->$data = 'data_1';
    }


    public function show() {
        // here I'm using the protected var (I would like to use it from child)
        echo $this->data;
    }

}
new parent();

class child extends parent {


    public function __construct() {
        parent::__construct();
        add_action('wp_ajax_child_output', array(&$this, 'child_output'));
    }

    public function child_output() {
        $this->data = 'data_2';
        // I would like to use  $this->data in parent::show();
        parent::show();
    }

}
new child();

Как я могу переопределить использование всех защищенных переменных в родительском?


person freaky    schedule 05.06.2015    source источник
comment
А что на самом деле не работает?   -  person β.εηοιτ.βε    schedule 06.06.2015
comment
$this-›data пусто в родительской функции show(), когда я запускаю дочернюю функцию вывода   -  person freaky    schedule 06.06.2015


Ответы (2)


Я только что проверил ваш код, и он выдает правильный вывод. Проблема кроется в другом. когда вы используете child_output(), вы используете его правильно. Все защищенные свойства доступны непосредственно через дочерний класс, а также все защищенные общедоступные методы.

person qwerty_igor    schedule 05.06.2015
comment
Вы правы, проблема исходит из другого места. Спасибо. - person freaky; 06.06.2015

если вы создаете объект из родительского класса, то вы используете родительский класс как есть. Если вы создаете объект из дочернего класса, то он наследует все свойства и методы родительского класса, таким образом, дочерний класс имеет свойство $data и три дополнительных метода.

person Frank B    schedule 05.06.2015