对于模糊的标题感到抱歉...我有一个php4类的问题,似乎很难说出来。
我的类有一个“possibleValues”数组,它包含可以从外部更改的某些属性可接受的值类型的信息。在下面的伪代码示例中,您可以看到我拥有共享相同可接受值(颜色)的属性。显然,我的代码中的$this->colors
失败了,因为你不能通过另一个来定义一个类变量(可以吗?)。
我如何设置一个我可以像这样引用的常用颜色数组,这样我就不必为允许相同值的不同字段重复相同的有效选项?
Class MyTest {
var $colors = array('red', 'yellow', 'blue');
var $possibleValues = array(
'someAttribute', array(0,1),
'someEmotions', array('happy, 'sad'),
--> 'someColorableAttribute', $this->colors,
--> 'someOtherColorableAttribute', $this->colors,
);
...
}
答案 0 :(得分:1)
在回答您的问题时,您应该在构造函数中设置变量。在PHP4中,你真的不应该使用它,构造函数应该具有类的名称。
function MyTest()
{
$this->var = $this->colors;
}
答案 1 :(得分:1)
如果您不想在构造函数中设置$possibleValues
,可以尝试这种方法:
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'));
我正在使用get_object_vars
,因为PHP 4中不存在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;
}
}