abstract class BaseController
{
protected $arctica, $database, $content, $cacheTime;
function __construct($arctica)
{
$this->arctica = $arctica;
$this->config = $arctica->config;
$this->database = $arctica->database;
}
class Controller extends BaseController
{
protected $cacheTime = 2;
protected $database = 'override'; //trying to override database var
function __construct($arctica)
{
parent::__construct($arctica);
}
function Run()
{
var_dump($this->database); //A class instance, not string('override')
$this->load('homepage');
}
}
Я хотел бы задать несколько вопросов об этом классе.Переопределение защищенных переменных между родительскими и дочерними классами
Q1: Если я хочу достичь $database variable of child class
, как я могу дотянуться до него?
Q2: Как я могу гарантировать, что $database variable in parent class
не может быть изменен/отменен классом ребенка, даже в самом себе? ($ database должен быть постоянным экземпляром базы данных, поэтому дочерний элемент контроллера не должен касаться его.) Сейчас это так, но я не знаю, почему tbh.
Q3: Как добавить дополнительные параметры в мои созданные переменные? Например, вместо защищенного $ var protected const $var
было бы больше смысла для меня. Это что-то, что PHP не поддерживает или вообще не поддерживается в ООП? (Может быть, это поддерживается, и я не знаю как?)
Q4: Если я определяю метод в родительском классе, могу ли я связаться с ним без $ this? Мне нравится load('homepage')
.
Спасибо большое!
Q1: Откуда? От родителя к ребенку? – Ihsan
Взгляните на окончательный вариант: http://www.php.net/manual/en/language.oop5.final.php – jantimon
Q3: Как можно использовать защищенную нестационарную константу? – jantimon