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->. Как я могу это сделать? У меня есть файл настроек, и мне нужно получить значения из них с помощью функции. Я не хочу определять одну и ту же функцию в каждом файле настроек.
Вы можете установить область действия 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)
оттуда.
Вы можете получить доступ только к закрытым свойствам в классе, в котором эти свойства объявлены. В вашем случае это класс 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;