Должны ли данные, которые одинаковы во всех экземплярах классов, храниться в отдельном статическом классе? - PullRequest
0 голосов
/ 03 октября 2011

Если у меня есть класс, который будет создан, который должен ссылаться на данные и / или функции, которые будут одинаковыми для каждого класса.Как это обрабатывать, чтобы следовать правилам программирования

Пример (на 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, объявленную только один раз.

Является ли идеястатического класса, скажем ColumnHelper или ColumnHandler хороший способ справиться с этим?Или есть способ хранить статические данные и методы в этом классе?Или это переопределение $_validTypes для каждой колонки - хороший способ сделать что-то?

1 Ответ

0 голосов
/ 03 октября 2011

Один из вариантов - создать новую модель для конфигурации столбца, например,

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

, а затем либо добавить ее один раз в API, если она у вас есть, либо создать один глобальный экземпляр, например,

$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)){
          ....
        }
    }
}

Звучит как путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...