2011-10-02 5 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 변수를 개최한다. 이 변수는 실제로 생성 된 모든 열이 $_validTypes 변수를 보유 할 정적 클래스에 대해 한 번만 선언 된 정적 함수 type_is_valid을 참조 할 수있는 메모리에서 한 번만 정의해야합니다.

정적 클래스의 아이디어, 예 : ColumnHelper 또는 ColumnHandler이 문제를 해결하는 좋은 방법입니까? 아니면이 클래스 내에 정적 데이터와 메소드를 보유 할 수있는 방법이 있습니까? 또는 각 열에 대해 $_validTypes의 재정의를 수행하면 정상적으로 수행 할 수 있습니까?

답변

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

소리가 나는 것과 같습니다.

관련 문제