我正在尝试动态访问静态命名空间属性(使用delight-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
(两个$
),错误更改为:
Access to undeclared static property: Delight\Auth\Role::$ADMIN
因此您可以看到该变量已解析,但是仍然插入了$
。如果使用PHP 5.6.37
会有所帮助。
有没有办法像这样动态地访问静态属性?
答案 0 :(得分:0)
您正在混淆术语。您正在使用的语法正在访问类的静态属性,但是您正在描述类常量的功能。
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,描述了如何动态引用类常量,这就是您要尝试做的事情。