$possibleValues
inコンストラクターを設定したくない場合は、次の方法を試すことができます。
PHP 4
class MyTest {
var $colors = array('red', 'yellow', 'blue');
var $possibleValues = array(
'someAttribute' => array(0,1),
'someEmotions' => array('happy', 'sad'),
'someColorableAttribute' => 'colors',
'someOtherColorableAttribute' => 'colors',
);
function getPossibleValues($attr) {
//no attribute, empty list
if (!array_key_exists($attr, $this->possibleValues))
return array();
$possible_values = $this->possibleValues[$attr];
//value is a string, check for object variable with such name
if (is_string($possible_values)) {
if (!array_key_exists($possible_values, get_object_vars($this)))
return array();
return $this->$possible_values;
}
return $possible_values;
}
}
$a = new MyTest();
var_dump($a->getPossibleValues('someAttribute'));
var_dump($a->getPossibleValues('someEmotions'));
var_dump($a->getPossibleValues('someColorableAttribute'));
var_dump($a->getPossibleValues('someOtherColorableAttribute'));
PHP 4には存在しないため、使用しget_object_vars
ています。property_exists
PHP 5(クラス定数)
class MyTest {
const COLORS = 'red|yellow|blue';
private $possibleValues = array(
'someAttribute' => array(0,1),
'someEmotions' => array('happy', 'sad'),
'someColorableAttribute' => self::COLORS,
'someOtherColorableAttribute' => self::COLORS,
);
public function getPossibleValues($attr) {
//no attribute, empty list
if (!array_key_exists($attr, $this->possibleValues))
return array();
$possible_values = $this->possibleValues[$attr];
//value is a string, explode it around |
if (is_string($possible_values)) {
return explode('|', $possible_values);
}
return $possible_values;
}
}