질문/조언팁/리소스 공유

개발하실때 도움될듯 합니다.

php로도 가능하네요.

핵심은 setter 메소드에 자기자신을 리턴하면 됩니다.

 

예제

 

class Person{
  private $_name;
  private $_sex;
  private $_age;
  private $_height;
  private $_weight;

  public function name($name){
    $this->_name = $name;
    return $this;
  }

  public function sex($sex){
    $this->_sex = $sex;
    return $this;
  }

  public function age($age){
    $this->_age = $age;
    return $this;
  }

  public function height($h){
    $this->_height = $h;
    return $this;
  }

  public function weight($w){
    $this->_weight = $w;
    return $this;
  }
  public function save(){
    $properties = get_object_vars($this);
    $str = '';
    foreach($properties as $property){
        $str .= $property.' ';
    }
    return $str;
  }
}

 

$p = new Person();
$res = $p->name('natura')->sex('Male')->age('99')->height('5.8')->weight('51')->save();
echo $res;

# natura male 99 5.8 51

 

https://en.wikipedia.org/wiki/Fluent_interface

 

글쓴이 natura

?
나무의 마음
  • profile

    여러 개를 붙이는 기능까지는 없지만, XE에서 간단하게 응용할 수 있는 방법으로는

    $oDocumentModel = getModel('document');
    $document = $oDocumentModel->getDocument($document_srl);
    $oMemberModel = getModel('member');
    $member_info = $oMemberModel->getMemberInfoByMemberSrl($document->get('member_srl'));


    이런 코드를

    $document = getModel('document')->getDocument($document_srl);
    $member_info = getModel('member')->getMemberInfoByMemberSrl($document->get('member_srl'));


    이렇게 줄일 수 있습니다.

    물론 $oDocumentModel이나 $oMemberModel을 여러 번 사용해야 한다면 미리 한 번 선언해 놓는 편이 더 효율적이지만, 그냥 한 번 끌어다 쓸 때는 이렇게 getModel() 함수에 직접 메소드를 갖다붙이는 편이 훨씬 간단하지요.


서버에 요청 중입니다. 잠시만 기다려 주십시오...