[php5버전이상] Method chaining / Fluent interface
개발하실때 도움될듯 합니다.
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
댓글 1
여러 개를 붙이는 기능까지는 없지만, 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() 함수에 직접 메소드를 갖다붙이는 편이 훨씬 간단하지요.