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

base.php:

<?php namespace MyQuestion\Base;

abstract class BaseSetting
{
public function GetValue($setting)
{
return $this->$setting;
}
}

derived.php

<?php namespace MyQuestion\Configs;

use MyQuestion\Base;

class Settings extends BaseSetting
{
private $a = 'value 1';
private $b = 'value 2';
private $c = "value 3";
}

index.php

$abc = new Settings();
$mySettings = $abc->GetValue('a');

Я пытаюсь отладить код. Что-то не работает в настройках $ this->. Как я могу это сделать? У меня есть файл настроек, и мне нужно получить значения из них с помощью функции. Я не хочу определять одну и ту же функцию в каждом файле настроек.

0

Решение

Вы можете установить область действия private от $ до protected $ а

или же

вы можете

class Settings extends BaseSetting
{
public function GetValue($setting)
{
return parent::getValue($setting)
}
}

Без этого когда будешь звонить mySettings = $abc->GetValue('a'); это позвонит BaseSetting::GetValue() в контексте BaseSetting, Как $a является private у него не будет доступа в BaseSetting, Либо вам нужно изменить модификатор доступа, чтобы понизить, как public или же protected или вам нужно переопределить вызов getValue() и позвонить parent::getValue($setting) оттуда.

0

Другие решения

Вы можете получить доступ только к закрытым свойствам в классе, в котором эти свойства объявлены. В вашем случае это класс Settings,

Я не знаю, что именно вы хотите, но обходной путь может быть

class Settings extends BaseSetting
{
private $a = 'value 1';
private $b = 'value 2';
private $c = "value 3";

public function __get($attr)
{
return $this->$attr;
}
}

Тогда вы можете получить доступ к собственности по $mySettings = $abc->a;

0