【问题标题】:Extend a class to use child private variable扩展一个类以使用子私有变量
【发布时间】:2019-08-28 15:00:24
【问题描述】:

我在供应商文件夹中有一个类,它有一个数组

private $mids = [
    'a' =>'b',
    'c' => 'd'
];
private $config = [
    'sid' => null,
    'aid' => null,
];

和一个设置私有 $config 的构造函数

function __construct($config){
    foreach ($config as $key => $value) {
        if (array_key_exists($key, $this->config)) {
            $this->config[$key] = $value;
        }
    }
}

我想用新的键/值 'x' => 'y' 更新 $mid,所以我扩展了类并复制了父构造函数 到子构造函数。

但是当我尝试调用在父级中定义的函数时,我得到了 undefined $this->config($key) 的错误。 所以该函数使用父 $config 属性而不是子属性。

我做错了什么?

或者最好的方法是什么而不是编辑供应商来源

【问题讨论】:

标签: php


【解决方案1】:

如果您想在子类中使用变量,请将它们设为受保护而不是私有。

protected $mids = [
'a' =>'b',
'c' => 'd'
 ];
protected $config = [
  'sid' => null,
  'aid' => null,
];

【讨论】:

  • 我了解,但我不想编辑供应商来源。除了复制整个代码并修改之外,没有别的办法吗?
  • 你可以检查一下它会帮助你private-variable
  • 我认为,供应商的源代码可以在 GitHub 或其他地方获得。您可以分叉项目并将代码更改为您的需要。然后,您甚至可以发出合并请求,将您的更改放入您正在使用的库中。如果合并请求将被接受,您就完全没有麻烦了。否则,您只需将依赖项更改为您的分叉源。不过,您必须注意原始来源的更新。
  • 已经要求供应商更新他的源代码,现在我将复制代码并使用它。
猜你喜欢
  • 2019-10-06
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 2016-07-28
  • 1970-01-01
相关资源
最近更新 更多