2

这是一些可能被过度编码的代码的非常简化的示例,但我想使用类常量访问类成员变量,并且想知道是否有比使用下面的 $foo->__get 更简单的语法?

class Foo
{
    const BAR = 'bar';

    private $props = array( self::BAR => 'wee' );

    public function __get($name)
    {
        return $this->props[$name];
    }
}

$foo = new Foo();
echo $foo->__get(Foo::BAR);
4

2 回答 2

4

这也有效:

$foo->{Foo::BAR};

或实施ArrayAccess,那么您可以拥有:

$foo[Foo::BAR]

但是为什么不访问它$foo->bar呢?!你打算改变这个常数还是我在这里遗漏了什么?

于 2013-05-10T23:33:31.233 回答
1

我认为代码看起来不错,但您可以使用构造函数来初始化props数组:

class Foo
{
    const BAR = 'bar';

    private $props;

    public function __construct() {
        $this->props = array( self::BAR => 'wee' );
    }

    public function __get($name)
    {
        return $this->props[$name];
    }
}
于 2013-05-10T23:30:46.263 回答