0

各クラスで同じになるデータや関数を参照する必要があるインスタンス化されるクラスがある場合。適切なプログラミング手法に従うために、これをどのように処理する必要がありますか

例 (PHP):

class Column {
    $_type = null;
    $_validTypes = /* Large array of type choices */;

    public function __construct( $type ) {
        if( type_is_valid( $type ) ) {
             $_type = $type;
        }
    }

    public function type_is_valid( $type ) {
        return in_array( $type, $_validTypes );
    }
}

次に、列が作成されるたびに、$_validTypes変数が保持されます。type_is_validこの変数は、作成されたすべての列が変数を保持する静的クラスの静的関数を参照できるメモリ内で一度だけ定義する必要があり、$_validTypes一度だけ宣言されます。

静的クラスのアイデアは、たとえばColumnHelperColumnHandlerこれを処理する良い方法ですか? または、このクラス内に静的データとメソッドを保持する方法はありますか? または、この$_validTypesfor each Column の再定義は、物事を行うための適切な方法ですか?

4

1 に答える 1

0

1 つのオプションは、列構成の新しいモデルを作成することです。

class ColumnConfig {
    private $validTypes;
    public isValid($type){
        return isset($this->validType($type))?true:false;
    }
}

次に、APIがある場合はAPIに一度追加するか、グローバルインスタンスを1つ作成します。

$cc = new ColumnConfig();
class Column {
    private $cc;
    function __construct($type){
        $this->cc = $this->api->getCC(); // if you have api
        global $cc; // assuming you have no api, an you create a global $cc instance once.
        $this->cc = $cc; // <-- this would pass only reference to $cc not a copy of $cc itself.

        if ($this->cc->isValid($type)){
          ....
        }
    }
}

さすがですね。

于 2011-10-02T20:34:44.627 に答える