Правильный способ установить защищенную переменную из другого класса 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';
}
}
Как я могу это сделать?
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 );
}
}