0

我遇到过几次,找不到解决方案。我想要做的是在类属性中存储一个类名(包括命名空间,如果相关)并使用调用 const$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;
  }

}
4

2 回答 2

0

使用 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');
  }

}
于 2013-11-12T14:24:50.757 回答
0

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

您是否试图获得您想要的属性并将其用作类名。

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

阅读起来也可能令人困惑。想象一下,在您的情况下,您为您的财产命名A,然后它会echo $this->A::VALUE; 显示您期望会发生什么?

于 2013-11-12T14:31:22.940 回答