PHP';自我';弗雷奇

PHP';自我';弗雷奇,php,Php,假设我有 abstract class Foo { public static $bar1 ... public static $bar2 ... public static $bar3 ... public static function getBars() { // ... // } } 我希望getbar()返回所有这些静态bar变量的列表。所以我试着 public static function getBars() {

假设我有

abstract class Foo
{
    public static $bar1 ...
    public static $bar2 ...
    public static $bar3 ...

    public static function getBars() {
        // ... //
    }
}
我希望
getbar()
返回所有这些静态bar变量的列表。所以我试着

public static function getBars() {
    foreach(self as $value) {
        echo $value . '<br>';
    }
}
公共静态函数getbar(){
foreach(自身为$value){
回显$value。“
”; } }
不行。显然,
$this
对foreach有效,但
self
不起作用。有什么想法吗


编辑:一点背景知识,我正在尝试模仿类似Java的枚举,条形图是不同类型的,如“周一、周二,…”,
getbar()
旨在模仿值迭代器

“self”是当前类,$this是当前实例。
为了迭代某些内容,您需要实际拥有某些内容。”“self”是一个模型,其中$this是实际对象。

您可以使用如下内容:

$reflectionClass = new ReflectionClass(__CLASS__);
$staticProperties = $reflectionClass->getStaticProperties(); 

你会把它们排成一列。

这种设计不好。那么用条列表代替呢?为什么不将它们存储在一个数组中呢<代码>公共静态$bar?然后:
self::$bar=[$bar1,$bar2,$bar3]
Ugh,使用
ReflectionClass
获取类变量
获取对象变量
,无论哪一个最符合您的要求,您都不能很容易地循环使用
self
(除非反射混乱)这与您不能很容易地循环所有局部变量的原因大致相同:因为变量的行为并非如此P如果你想要一个
$bar1
$bar2
$bar3
,等等,你想要的是一个名为
$bar
的数组。这是可行的,反射可能在PHP世界中还不太为人所知-但对我来说,反射更多是为了调试和分析,生产方面没有这么多code@cypherabe我同意,但从代码上看,这就是它的使用方式,我无法想象在一个实时站点中会出现这种情况。