对于deleteBarDocument()
,我不希望实现
$this->getModel()->updateParentAudit($this->audit_table,$_POST['id']);
在 deleteDocumentHelper()
帮助程序方法中,但实现其他内容,例如
$this->bla($_POST['id']);
$this->blabla($_POST['id'],$_POST['doc_id']);
如何延长deleteDocumentHelper()
deleteBarDocument()
,但保持原样deleteFooDocument()
?
通常,我只会替换
$this->getModel()->updateParentAudit($this->audit_table,$_POST['id']);
跟
$this->doSomething();
并使用所需的任何代码创建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
?>
你说:
通常,我只会替换
$this->getModel()->updateParentAudit($this->audit_table,$_POST['id']);
跟
$this->doSomething();
并使用所需的任何代码创建
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);}
}
使用这种方法,您可以基本上保留父类,并仅在需要时应用不同的代码。