访问对象内数组元素的方法

时间:2012-05-20 18:44:43

标签: php class properties reference

我正在尝试将现有代码库转换为更正确的方法。我们现有的代码库是用HTML编写的,PHP和Javascript代码遍布整个地方(不是以无序的方式,但不应该是这样)。

所以我将我们当前的代码库转换为使用类,因此属性和方法是继续进行的方式。但我有一个问题。我(理想情况下)希望通过名称而不是索引来引用我的一个类成员。让我把它放在代码示例中。

这是表单类:

class form {
    public $name;
    public $fields;

    {constructor goes here...}

    public function addField($type, $name, $hint = null, $info = null) {
        $this->fields[] = new field($type, $name, $hint, $info);
    }
}

这是字段类(表单类在创建新表单字段时调用):

class field {
    public $name;
    public $type;
    public $values;

    public function __construct($name) {
        $this->name = $name;
        $this->fields = null;
    }

    public function addValue($value, $minimum = null, $maximum = null, $step = 1) {
        $this->values[] = new value($value, $minimum, $maximum, $step);
    }
}

所以我的代码看起来像这样:

$form = new form("form1");
$form->addField(NUMBER, "number1");
$form->fields[0]->addValue(25, 1, 250, 1);

它确实有效,但最终并不是我想要的。我想按指定名称调用每个字段,以便我可以写这个:

$form = new form("form1");
$form->addField(NUMBER, "number1");
$form->fields['number1']->addValue(25, 1, 250, 1);

甚至:

$form->addField(NUMBER, "number1")->addValue(25, 1, 250, 1);

有可能吗?

1 个答案:

答案 0 :(得分:2)

看起来这些字段只是表单对象中的一个数组。而不是

 $this->fields[] = new field($type, $name, $hint, $info);

你能这样做吗?

 $this->fields[$name] = new field($type, $name, $hint, $info);