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我同意,但从代码上看,这就是它的使用方式,我无法想象在一个实时站点中会出现这种情况。