Правильный способ установить защищенную переменную из другого класса PHP


Мне нужно решить эту проблему: Я создаю два класса, где второй является расширением первого, и там я хочу установить и получить переменную из первого класса, но... Я не могу найти "правильный" способ сделать это в основном так:

class class_one {

    protected $value;
    private $obj_two;

    public function __construct() {
        $this->obj_two = new class_two;
    }

    public function firstFunction() {

        $this->obj_two->obj_two_function();

        echo $this->value; // returns 'New Value' like set in the class two

    }

}

class class_two extends one {   
    public function obj_two_function() {    
        "class_one"->value = 'New Value';   
    } 
}

Как я могу это сделать?

Author: Matheus Hernandes, 2014-10-23

1 answers

Первый класс не должен инициализировать второй, если только вы не ищете Уробороса! Защищенные переменные могут быть установлены расширенным классом без какой-либо поддержки функций. Просто иди $this->protVariable = "stuff";

Но вам понадобится функция, которая может быть защищена, чтобы установить закрытую переменную ClassOne из второго класса. Аналогично, функция должна быть выполнена в ClassOne, чтобы фактически получить ее значение.

class ClassOne {
    private $privVariable;
    protected $protVariable;

    /**
     */
    function __construct () {

    }

    /**
     * This function is called so that we may set the variable from an extended
     * class
     */
    protected function setPrivVariable ($privVariable) {

        $this->privVariable = $privVariable;

    }

}

Во втором классе вы можете затем вызвать parent::setPrivVariable(), чтобы установить значение с помощью родительского функция.

class ClassTwo extends \ClassOne {

    /**
     */
    public function __construct () {

        parent::__construct ();

    }

    /**
     * Set the protected variable
     */
    function setProtVariable () {

        $this->protVariable = "stuff";

    }

    /**
     * see ClassOne::setPrivVariable()
     */
    public function setPrivVariable ($privVariable) {

        parent::setPrivVariable ( $privVariable );

    }

}
 2
Author: Baldvin, 2014-10-23 19:31:45