2016-02-14 110 views
0

对于deleteBarDocument(),我希望不要执行扩展PHP辅助方法

$this->getModel()->updateParentAudit($this->audit_table,$_POST['id']); 
deleteDocumentHelper() helper方法

,但实施其他的东西,如

$this->bla($_POST['id']); 
$this->blabla($_POST['id'],$_POST['doc_id']); 

如何为deleteBarDocument()延长deleteDocumentHelper(),但让它保持原样deleteFooDocument()

通常情况下,我只想用

$this->doSomething(); 

更换

$this->getModel()->updateParentAudit($this->audit_table,$_POST['id']); 

,并创建一个doSomething()法需要任何代码。这种方法很可能会影响deleteFooDocument()deleteBarDocument()这是不希望的。

或者我应该传递一个匿名函数的帮助器方法吗?我谨慎行事,因为我已经警告过应该谨慎使用匿名函数。

<?php 
class parentController 
{ 
    protected function deleteDocumentHelper($type){ 
     if(isset($_POST['id'],$_POST['doc_id'])){ 
      if(documents::removeDocument($type,$_POST['doc_id'],$_POST['id'])) 
      { 
       $success=1; 
       //Ability to replace the following line with one or more lines 
       $this->getModel()->updateParentAudit($this->audit_table,$_POST['id']); 
      } 
      else {$success=0;} 
      header('Content-Type: application/json;'); 
      $this->dontCache(); 
      echo(json_encode(array('success'=>$success))); 
     } 
     else {exit($this->missingPage());}   
    } 
} 

class childController extends parentController 
{ 
    public function deleteFooDocument(){$this->deleteDocumentHelper('foo');} 
    public function deleteBarDocument(){$this->deleteDocumentHelper('bar');} 
} 

//Application creates childController object, and evokes apprpropriate method based on GET/POST 
?> 

回答

0

你说:

通常情况下,我只想用

$this->doSomething(); 

更换

$this->getModel()->updateParentAudit($this->audit_table,$_POST['id']); 

,并创建一个doSomething()法需要任何代码。这种方法很可能会影响deleteFooDocument()deleteBarDocument()这是不希望的。

但是,为什么不以以下方式?

class parentController 
{ 
    protected function doSomething() 
    { 
     $this->getModel()->updateParentAudit($this->audit_table,$_POST['id']); 
    } 

    protected function deleteDocumentHelper($type){ 
     if(isset($_POST['id'],$_POST['doc_id'])){ 
      if(documents::removeDocument($type,$_POST['doc_id'],$_POST['id'])) 
      { 
       $success=1; 
       //Ability to replace the following line with one or more lines 
       $this->doSomething(); 
      } 
      (...) 
     } 
     else {exit($this->missingPage());}   
    } 
} 

class childController extends parentController 
{ 
    private $somethingElse = False; 

    protected function doSomething() 
    { 
     if($this->somethingElse) 
     { 
      // Your deleteBar code 
     } 
     else 
     { 
      parent::doSomething(); 
     } 
    } 

    protected function deleteDocumentHelper($type, $somethingElse=False) 
    { 
     $this->somethingElse = $somethingElse; 
     parent::deleteDocumentHelper($type); 
    } 

    public function deleteFooDocument(){$this->deleteDocumentHelper('foo');} 
    public function deleteBarDocument(){$this->$this->deleteDocumentHelper('bar',1);} 
} 

通过这种方法,您可以实质上保留父类不变,并且只在需要时应用不同的代码。

+0

感谢融合。是的,我可以这样做,但它看起来并不真实。我不是说你的解决方案不干净,但我所做的不是。我可能会这样做倒退... – user1032531

+0

其实,你想扩展'parentController-> deleteDocumentHelper'或者修改自己的代码吗? – fusion3k