2011-10-02 44 views
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一个很好的方式来处理这个?或者有没有办法在这个类中保存静态数据和方法?或者,这是为每个Column重新定义$_validTypes一个好方法来做事情?

回答

0

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

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

然后,如果您有API添加一次到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)){ 
      .... 
     } 
    } 
} 

听起来像是要走的路。

相关问题