【问题标题】:How to access class const using class property of another class如何使用另一个类的类属性访问类 const
【发布时间】:2013-11-12 14:12:02
【问题描述】:

我遇到过几次,找不到解决方案。我想要做的是在类属性中存储一个类名(包括命名空间,如果相关)并使用$this->property::CLASS_CONST; 调用一个常量 我想出如何做到这一点的唯一方法是使用局部变量而不是类属性。任何人都知道这是为什么,或者是否有任何解决方法?我的示例代码如下:

$o = new B();

$o->summon();

class A {

  CONST VALUE = 'HELLO WORLD';

}

class B {

  protected $className = 'A';

  public function summon() {

    //works
    $class = $this->className;
    echo $class::VALUE;

    //doesn't work
    echo $this->className::VALUE;
  }

}

【问题讨论】:

  • 因为您无法从公共方法直接访问 $this->className
  • 可能重复13313459

标签: php oop


【解决方案1】:

使用 PHP 的constant:

$o = new B();

$o->summon();

class A {

  CONST VALUE = 'HELLO WORLD';

}

class B {

  protected $className = 'A';

  public function summon() {

    // works
    $class = $this->className;
    echo $class::VALUE;

    // doesn't work
    echo $this->className::VALUE;

    // works
    echo constant($this->className . '::VALUE');
  }

}

【讨论】:

  • 谢谢,我喜欢这种方法。
【解决方案2】:

我想这不起作用是设计使然。由于语义不清楚。

您是否尝试按照您的意愿获取属性并将其用作类名。

或者您是否希望获取属性className::VALUE 的值。因为你可以有一个变量属性。

阅读起来也可能令人困惑。想象一下,在您的情况下,您的属性名为 A,那么它将显示为 echo $this->A::VALUE;,您希望会发生什么?

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2020-09-17
    • 2020-10-10
    • 2020-02-18
    • 2010-09-05
    • 2020-04-14
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多