我正在尝试将现有代码库转换为更正确的方法。我们现有的代码库是用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);
有可能吗?
答案 0 :(得分:2)
看起来这些字段只是表单对象中的一个数组。而不是
$this->fields[] = new field($type, $name, $hint, $info);
你能这样做吗?
$this->fields[$name] = new field($type, $name, $hint, $info);