2009-08-01 3 views
1

그냥 생각 : (PHP에서)세터/게터

예 : 이름 설정합니다 : $ 개체 -> 이름 ('이름'); 이름을 얻으려면 : $ object-> name();

인수가없는 경우 : 메소드가 getter로 사용되고 그렇지 않으면 setter로 사용됩니다. 간단한 getters/setter. 어리석은, 어쨌든, 어쩌면?

편집 : 답변을 후속 처리 : 나는 을 받고 가능하면 명시 적으로 인터페이스를 갖고 싶어하므로을 가져오고 설정하십시오. 단지 몇 가지 속성이있을 때 그것은 IMHO 과잉입니다. 그래서 명시적인 getter/setter 몇 가지로 클래스/객체로 범위를 좁히고 싶습니다.

+1

인터페이스가 가능한 한 명시 적으로 표시되도록하려면 전달되는 항목에 따라 두 가지 다른 방법을 사용하는 한 가지 방법을 고려하는 이유가 무엇입니까? –

+0

좋은 질문입니다. 나는 그 생각이 그 문제에 직면 할 때 명확 해지기를 바랬다. setX/getX를 사용하는 것만 큼 명확하지는 않지만 덜 복잡 해지는 인터페이스에 대해서는 약간의 명확성을 유지하기에 충분합니다. – koen

+0

여러 가지 방법을 시도해 봤지만 클래스 속성과 같은 이름의 함수를 사용하는 것이 가장 좋습니다. '__get'과'__set'는 호출 코드를 멋지게 만듭니다. 그러나 클래스 코드는 약간 못 생깁니다. '$ obj-> property'와'$ obj-> property()'사이에는 많은 차이가 없습니다. – DisgruntledGoat

답변

1

물론, 당신은, 당신의 응용 프로그램에서 의미가, 그렇지 않으면 난 그냥 이미 당신을 위해 설정 한 표준의 getter/setter를 사용하는 것이라고 할 수있다. 함수는 다음과 같이 보일 수 있습니다 : 그것은 __call() 매직 메소드를 사용하여 수행 할 수 있습니다

public function name($val = null) 
{ 
    if (is_null($val)) 
    { 
    return $this->name; 
    } 
    else 
    { 
    $this->name = $val; 
    } 
} 
+0

나는 downvote의 이유를 알고 싶습니다. – koen

+0

나도 마찬가지야 ... ;-) –

+2

나는 downvoter가 아니었지만, 이런 종류의 결합 된 getter/setter는 당신이 문제의 속성을 NULL로 설정할 수 없다는 점을 지적하고자한다. – Otterfan

4

문제는 따라하기가 어렵습니다. 나는 PHP5의 __get과 __set을 사용하여 변수를 얻고 설정하는 것이 더 자연스럽고 모든 사람들이 내가하는 일을 정확히 알 수 있습니다. IE :

 
class myClass 
{ 

    function __get($name) 
    { 
     return $this->array[$name]; 
    } 
    function __set($name, $value) 
    { 
     $this->array[$name] = $value; 
    } 
    function print() 
    { 
     echo $this->array['test']; 
    } 
} 
$obj = new myClass; 
$obj->test = "Hi"; 
echo $obj->test; //echos Hi. 
$obj->print(); //echos Hi. 
2

.

class Test { 
    public function __call($name, array $args) { 
     $variable =& $this->$name; 
     if(!empty($args)) { 
      $variable = $args[0]; 
     } 
     return $variable; 
    } 
} 
+0

의도적으로 세트의 속성을 반환합니까? – hobodave

+0

예. – moo

+0

아마도 간단하기는하지만 좋은 부가 효과 일 수 있습니다. 특히 어떤 변수를 추가하여 어떤 변수를 추가 할 수 있는지 제한해야합니다. –