【发布时间】:2009-07-08 09:44:25
【问题描述】:
首先我想说这不是一个容易解释的问题,所以如果它看起来令人困惑,请耐心等待。
我有一组这样的类
class Product {
public static $static_type = 'product';
public static $static_table = 'product_table';
public function __construct($params) { //do some }
}
然后是新闻、事件等类
我需要从另一个类以迭代的方式访问这些类中的那些静态变量。比如:
//...
if (Product::$static_type) { //do some }
else if (News::$static_type) { //do other }
//...
我想在一个循环中对其进行改造,比如 foreach 以这样的方式(这不正确,但对我的问题有意义)
foreach ($classes as $class) {
echo $class::$static_type; //brrrr, just to render the idea :)
}
所以我想到了一个单例/静态类,它有一个静态方法返回我的类数组(未实例化)。像这样:
class Conf {
public function __construct() {
//nothing
}
public static function get_class_array () {
//how to do this???
}
}
然后
foreach (Conf::get_class_array() as $class) {
echo $class::$static_type; //brrrr, just to render the idea :)
}
我怎样才能做到这一点?在这种情况下,我不想实例化 Product、News 或其他。
编辑:eval 是邪恶的,我不想使用它。 get_declared_class 没有技巧,如果没有办法解决我会使用反射,我认为这是提到的更优雅的方式:(。
编辑:同时我会以这种方式执行 Conf::get_class_array()
public static function get_class_array () {
return array(new ReflectionClass('Prodotto'), new ReflectionClass('News'));
}
然后在这里调用它:
foreach (Conf::get_class_array() as $class) {
echo $class->getStaticPropertyValue('static_type');
}
【问题讨论】: