0

私は既存のコードベースをより正しいアプローチに変換しようとしています。私たちの既存のコードベースは、PHPとJavascriptコードがいたるところに挿入されたHTMLで書かれています(順序付けられていない方法ではありませんが、そうであるべきではありません)。

したがって、現在のコードベースを変換してクラスを利用するようにしているので、プロパティとメソッドが先に進む方法です。しかし、私には問題があります。私は(理想的には)クラスメンバーの1人をインデックスではなく名前で参照したいと思っています。これをコードサンプルに入れましょう。

これはフォームクラスです:

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);

出来ますか?

4

1 に答える 1

2

フィールドはフォームオブジェクト内の単なる配列のようです。だから代わりに

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

あなたはこれをすることができますか?

 $this->fields[$name] = new field($type, $name, $hint, $info);
于 2012-05-20T18:49:03.260 に答える