【问题标题】:access class depending on some variable访问类取决于某些变量
【发布时间】:2020-07-15 07:02:54
【问题描述】:

我有以下问题。我有一堂课,我在里面注入了不同的类。根据一些变量我需要加载类:

protected $safe;
protected $glass;
public function __construct(
    \My\Path\Block\Dynamicprice\Safe $safe,
    \My\Path\Block\Dynamicprice\Glass $glass
){
    $this->safe = $safe;
    $this->glass = $glass;
}

现在我有了这个硬编码的数组:

public $_ids=array(
    14534=>'glass',
    7521=>'safe'
);

现在在我的代码中,我需要根据给定的 ID 访问一个类。我试过这样:

$helper =  $this[$this->_ids[$id]];

通常我会这样写:

$helper = $this->safe->somePublicMethod();

可以动态做吗?

但它给我一个错误:不能使用 My\Path\Block\Dynamicprice\Helper 类型的对象作为数组。

有没有办法加载这个?

【问题讨论】:

  • 你需要这个语法:$this->{$this->_ids[$id]};
  • “加载类”是什么意思?当您调用构造函数时,这两个类都应该已加载并实例化
  • @NicoHaase 未加载,我的意思是访问。但它已经用$this->{$this->_ids[$id]}; 回答了

标签: php oop


【解决方案1】:

在这种情况下,PHP 允许您使用大括号。在您的情况下,您正在尝试动态访问类属性。那是绝对可能的。看看下面的例子。

$helper = $this->{$this->_ids[$id]};

如果$id 的值为7524,那么这段小代码将为您提供safe 类属性。

【讨论】:

    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2018-11-20
    • 1970-01-01
    • 2019-10-18
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多