【问题标题】:Dynamically accessing static properties using variable [duplicate]使用变量动态访问静态属性
【发布时间】:2018-09-19 01:00:15
【问题描述】:

我正在尝试动态访问静态命名空间属性(使用detail-im 的auth)。可能的值可能是:

\Delight\Auth\Role::ADMIN
\Delight\Auth\Role::USER

我想动态命名ADMIN部分,如下:

\Delight\Auth\Role::$role

但是 PHP 告诉我:

 Access to undeclared static property: Delight\Auth\Role::$role

所以我尝试像这样使用变量变量:

 \Delight\Auth\Role::$$val

(两个$s),错误变为:

 Access to undeclared static property: Delight\Auth\Role::$ADMIN

所以您可以看到变量已解析,但仍有一个$ 插入其中。我正在使用 PHP 5.6.37,如果这有影响的话。

有没有办法像这样动态访问静态属性?

【问题讨论】:

标签: php oop variables static


【解决方案1】:

您混淆了您的术语。您使用的语法是访问类的静态属性,但您描述的是类常量的特性。

Static properties 是存储在类中的可变变量。 PHP手册中的示例:

<?php
class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

你会像这样引用 $my_static:Foo::$my_static,这就是你正在做的事情。

Class constants 似乎就是您所描述的。 PHP手册中的示例:

<?php
class MyClass
{
    const CONSTANT = 'constant value';

    function showConstant() {
        echo  self::CONSTANT . "\n";
    }
}

您会像这样引用 CONSTANT:MyClass::CONSTANT

这是一个better answer,描述了如何动态引用类常量,这正是您尝试做的。

【讨论】:

    猜你喜欢
    • 2021-10-25
    相关资源
    最近更新 更多