我不確定使用Splenum是否更好,但我知道這可以使用ReflectionClass完成。假設你想在擴展DaysOfWeek一個類中定義getOptions,你的代碼可能是這個樣子:
abstract class DaysOfWeek
{
const Sunday = 0;
const Monday = 1;
// etc.
}
class myClass extends DaysOfWeek {
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
$retval = array();
foreach($constants as $name => $val) {
$retval[$val] = $name;
}
return $retval;
}
}
$o = new myClass();
var_dump($o->getOptions());
編輯:這裏是一個更加緊湊和高效的版本,它使用本地PHP函數getOptions功能:
public function getOptions() {
$oClass = new ReflectionClass(__CLASS__);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
編輯2:如果getOptions是一類不延伸DaysOfWeek,你可以簡單地指的是類名像這樣:
class AnotherClass {
public function getOptions() {
$oClass = new ReflectionClass(DaysOfWeek);
$constants = $oClass->getConstants();
return(array_combine(array_values($constants), array_keys($constants)));
}
}
$o = new AnotherClass();
var_dump($o->getOptions());
您可以使用構建函數來填充數組.. – scaisEdge
http://php.net/manual/en/class.splenum.php –