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

然后每次创建一个 Column 时,它将保存该$_validTypes变量。这个变量实际上只需要在内存中定义一次,其中创建的所有列都可以引用静态类的静态函数type_is_valid,该静态类将保存$_validTypes变量,只声明一次。

静态类的想法是说ColumnHelper还是ColumnHandler处理这个问题的好方法?或者有没有办法在这个类中保存静态数据和方法?还是重新定义$_validTypes每个 Column 是一种不错的做事方式?

4

1 回答 1

0

一种选择是为列配置创建一个新模型,例如

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

听起来不错。

于 2011-10-02T20:34:44.627 回答