Я хочу иметь возможность установить значение частного атрибута в родительском конструкторе и вызвать его в дочернем конструкторе или методе.
Например:
<?php
abstract class MainClass
{
private $prop_1;
private $prop_2;
function __construct()
{
$this->prop_2 = 'this is the "prop_2" property';
}
}
class SubClass extends MainClass
{
function __construct()
{
parent::__construct();
$this->prop_1 = 'this is the "prop_1" property';
}
public function GetBothProperties()
{
return array($this->prop_1, $this->prop_2);
}
}
$subclass = new SubClass();
print_r($subclass->GetBothProperties());
?>
Вывод:
Array
(
[0] => this is the "prop_1" property
[1] =>
)
Однако, если я изменю prop_2
на protected
, вывод будет:
Array
(
[0] => this is the "prop_1" property
[1] => this is the "prop_2" property
)
У меня есть базовые знания о OO и php, но я не могу понять, что мешает prop_2
вызываться (или показываться?), Когда это private
;это не может быть частная / публичная / защищенная проблема, так как prop_1 является частной и может вызываться и показываться ... верно?
Это проблема присвоения значений в дочернем классе по сравнению с родительским классом?
Буду признателен за помощь в понимании, почему.
Спасибо.