[英]OOP/PHP: Is it possible to have a default behaviour for every method of a class?
我试图通过OOP模式变得更好。
我有一个为一组数据生成XML的类。 对于不同的XML主体,它具有不同的方法,但是每种XML具有相同的标头,并且每种方法都需要将XML作为字符串返回。
我做了一个私有函数,该函数构造头并返回XML对象,特定的get方法根据需要添加她的子节点。 我做了一个私有函数,可以美化XML(如果已设置)并使用默认的“页脚”块将其关闭。
我正在考虑是否有一种模式可以对此进行优化,并确保init_xml和prepeare_xml都总是在每个公共方法的开头和结尾处都被调用。 是否可以以某种方式构造类,即每个公共方法调用均调用1st头方法,并在添加子节点后添加页脚方法?
有一个get_xml($ type,$ data)方法可以根据$ type调用特定的get _?_ xml方法吗? 还是有更好的模式?
我希望这个原始的例子有意义
class Foo{
private $xml;
public function get_bar_xml($data){
$this->xml = $this->init_xml();
foreach($data as $key => $value){
$this->xml->addChild(key, $value);
}
return $this->prepare_xml();
}
//... set of similar methods following with different
// child node creation
private function init_xml(){
//$this->xml header generation
}
private function prepare_xml(){
//add footer nodes to $this->xml
//format output if neccesary
return $this->xml;
}
}
听起来像Foo
是单身人士,还是至少仅实例化一次,然后生成许多XML文件? 您应该将一个对象实例视为一个XML文档:
class Foo {
protected $xml;
public function __construct() {
$this->xml = /* whatever */;
// add headers
}
public function add($data) {
// write $data to xml
}
public function asXML() {
$this->writeFooter();
return (string)$this->xml; // or whatever
}
}
您可以将其设为基类,并使用不同类型的文档对其进行扩展,以仅根据需要定制add
方法。 然后将其用作:
$foo = new Foo;
foreach ($data as $d) {
$foo->add($d);
}
echo $foo->asXML();
如果要创建下一个文档, 请不要重用$foo
,实例化一个new Foo
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.