2015-01-04 1 views
2

OOP 개념을 처음 접했으니 제 생각에는 틀린 방식 일 수 있습니다.PHP의 클래스 초기화에 선택적 구성 변수 전달

저는 꽤 자주 사용하는 일부 기능을위한 클래스를 개발하고 있으며 초기화시 새 프로젝트에서 구성 가능하도록하고 싶습니다. 여기서주의해야 할 점은 특정 기본 변수를 설정하고 기본 값이 괜찮은 경우 해당 변수를 구성 해제 된 상태로 유지할 수 있다는 것입니다. 개념을 좀 더 분명하게하려고하는 약간의 코드가 있습니다.

class someClass{ 

    // Setting parameter defaults 
    private $param_a = 60; 
    private $param_b = 100; 

    /* 
    * The construct function. What I'd like to do here is make the param_a and param_b optional, 
    * i.e if it doesn't get set on initialization it takes the defaults from the class. 
    */ 

    function __construct($param_a, $param_b, $foo){ 
     // do something ... 
    }  
} 

$foo = "some value"; 

// init example using defaults 
$someclass = new someClass($foo); // $param_a and $param_b should be 60 and 100 respectively 

// init example using custom options 
$someclass = new someClass(40, 110, $foo); 

클래스 구성 설정 방법에 관해서는 올바른 방향으로 가고 있습니까? 그렇다면 어떻게 param_a와 param_b를 선택적으로 만들 수 있습니까?

+1

덕분에 많이 –

답변

3
function __construct($foo, $param_a = 60, $param_b = 100){ 
    // do something ... 
} 

필수 메소드 인수를 먼저 제공 한 다음 나중에 기본 매개 변수가있는 인수를 제공하여 선택적으로 사용할 수 있습니다.

그런 다음이 값을 생성자 내의 클래스 변수에 할당합니다.

또 다른 방법은 func_get_args()를 사용하여 이것을 구문 분석하는 것입니다.

+0

감사 @halfer. 바보처럼 나는 물어보기 전에 PHP 매뉴얼을 보지 않았고 바로 거기에있다. 세 번째는 함수 인수 섹션에있다. 몇 분 만에이 대답을 올바르게 확인할 것입니다 (6 번 더 기다려야한다고 생각합니다). 건배! –

2

당신은 생성자는 일반적으로 $의 인수 인수를 가지고 디폴트의 배열을 병합 할 수 있습니다 : 편집에 대한

public function __construct($args = array()) { 

    $args = array_merge(array(
     'param_a' => 60, 
     'param_b' => 100, 
     'foo'  => null 
    ), $args); 

    foreach($args as $key => $val) { 
     $this->$key = $val; 
    } 

} 
+0

foo가 선택 적이거나 null이 아니기 때문에 훌륭한 솔루션이기 때문에 이것이 작동 할 지 확신하지 못합니다. –

+1

그렇다면 나는 잭의 해결책을 생각해 낼 것이다. 더 많은 수의 인수에 대해 솔루션을 사용하거나 자주 인수를 추가하거나 제거해야 할 수도 있습니다. 또한 필수 매개 변수가 지정되지 않았는지 확인하고 예외를 throw 할 수 있습니다. –

관련 문제